haikuwebkit/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp

305 lines
8.2 KiB
C++
Raw Permalink Normal View History

Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
/*
Add media stream release logging https://bugs.webkit.org/show_bug.cgi?id=195823 Source/WebCore: <rdar://problem/48939406> Reviewed by Youenn Fablet. No new tests, no behavioral change. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addTrackFromPlatform): (WebCore::MediaStream::setIsActive): (WebCore::MediaStream::mediaCanStart): (WebCore::MediaStream::startProducingData): (WebCore::MediaStream::stopProducingData): (WebCore::MediaStream::endCaptureTracks): (WebCore::MediaStream::stop): (WebCore::MediaStream::logChannel const): * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::logChannel const): * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: (WebCore::LibWebRTCMediaEndpoint::addTrack): (WebCore::LibWebRTCMediaEndpoint::sourceFromNewReceiver): * Modules/webaudio/AudioContext.cpp: (WebCore::AudioContext::AudioContext): (WebCore::nextLogIdentifier): Deleted. * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::nextLogIdentifier): Deleted. * html/HTMLMediaElement.h: * platform/audio/PlatformMediaSession.cpp: (WebCore::PlatformMediaSession::PlatformMediaSession): (WebCore::nextLogIdentifier): Deleted. * platform/audio/PlatformMediaSession.h: * platform/graphics/IntSize.cpp: (WebCore::IntSize::toJSONObject const): (WebCore::IntSize::toJSONString const): * platform/graphics/IntSize.h: (WTF::LogArgument<WebCore::IntSize>::toString): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): (WebCore::MediaStreamPrivate::startProducingData): (WebCore::MediaStreamPrivate::stopProducingData): (WebCore::MediaStreamPrivate::setCaptureTracksMuted): (WebCore::MediaStreamPrivate::trackMutedChanged): (WebCore::MediaStreamPrivate::trackEnabledChanged): (WebCore::MediaStreamPrivate::trackStarted): (WebCore::MediaStreamPrivate::trackEnded): (WebCore::MediaStreamPrivate::setLogger): (WebCore::MediaStreamPrivate::logChannel const): * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::setLogger): (WebCore::MediaStreamTrackPrivate::logChannel const): * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeIncomingAudioSource.cpp: (WebCore::RealtimeIncomingAudioSource::RealtimeIncomingAudioSource): (WebCore::RealtimeIncomingAudioSource::logChannel const): Deleted. (WebCore::RealtimeIncomingAudioSource::logger const): Deleted. * platform/mediastream/RealtimeIncomingAudioSource.h: (WebCore::RealtimeIncomingAudioSource::setLogger): Deleted. * platform/mediastream/RealtimeIncomingVideoSource.cpp: (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource): (WebCore::RealtimeIncomingVideoSource::logChannel const): Deleted. (WebCore::RealtimeIncomingVideoSource::logger const): Deleted. * platform/mediastream/RealtimeIncomingVideoSource.h: (WebCore::RealtimeIncomingVideoSource::setLogger): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::setInterrupted): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::notifyMutedChange): (WebCore::RealtimeMediaSource::notifySettingsDidChangeObservers): (WebCore::RealtimeMediaSource::videoSampleAvailable): (WebCore::RealtimeMediaSource::start): (WebCore::RealtimeMediaSource::stop): (WebCore::RealtimeMediaSource::captureFailed): (WebCore::RealtimeMediaSource::applyConstraint): (WebCore::RealtimeMediaSource::supportsConstraints): (WebCore::RealtimeMediaSource::applyConstraints): (WebCore::RealtimeMediaSource::setSize): (WebCore::RealtimeMediaSource::setIntrinsicSize): (WebCore::RealtimeMediaSource::setFrameRate): (WebCore::RealtimeMediaSource::setAspectRatio): (WebCore::RealtimeMediaSource::setFacingMode): (WebCore::RealtimeMediaSource::setVolume): (WebCore::RealtimeMediaSource::setSampleRate): (WebCore::RealtimeMediaSource::setSampleSize): (WebCore::RealtimeMediaSource::setEchoCancellation): (WebCore::RealtimeMediaSource::setLogger): (WebCore::RealtimeMediaSource::logChannel const): (WebCore::convertEnumerationToString): * platform/mediastream/RealtimeMediaSource.h: (WTF::LogArgument<WebCore::RealtimeMediaSource::Type>::toString): * platform/mediastream/RealtimeMediaSourceSettings.cpp: (WebCore::RealtimeMediaSourceSettings::convertFlagsToString): (WebCore::convertEnumerationToString): * platform/mediastream/RealtimeMediaSourceSettings.h: (WTF::LogArgument<WebCore::RealtimeMediaSourceSettings::VideoFacingMode>::toString): (WTF::LogArgument<OptionSet<WebCore::RealtimeMediaSourceSettings::Flag>>::toString): * platform/mediastream/RealtimeOutgoingAudioSource.cpp: (WebCore::RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource): (WebCore::RealtimeOutgoingAudioSource::logChannel const): (WebCore::RealtimeOutgoingAudioSource::logger const): Deleted. * platform/mediastream/RealtimeOutgoingAudioSource.h: (WebCore::RealtimeOutgoingAudioSource::setLogger): Deleted. * platform/mediastream/RealtimeOutgoingVideoSource.cpp: (WebCore::RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource): (WebCore::RealtimeOutgoingVideoSource::sendOneBlackFrame): (WebCore::RealtimeOutgoingVideoSource::sendFrame): (WebCore::RealtimeOutgoingVideoSource::logChannel const): (WebCore::RealtimeOutgoingVideoSource::logger const): Deleted. * platform/mediastream/RealtimeOutgoingVideoSource.h: (WebCore::RealtimeOutgoingVideoSource::setLogger): Deleted. * platform/mediastream/RealtimeVideoSource.cpp: (WebCore::RealtimeVideoSource::setSizeAndFrameRate): (WebCore::SizeAndFrameRate::toJSONObject const): (WebCore::SizeAndFrameRate::toJSONString const): * platform/mediastream/RealtimeVideoSource.h: (WTF::LogArgument<WebCore::SizeAndFrameRate>::toString): * platform/mediastream/mac/AVVideoCaptureSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::clearSession): (WebCore::AVVideoCaptureSource::startProducingData): (WebCore::AVVideoCaptureSource::stopProducingData): (WebCore::AVVideoCaptureSource::setSizeAndFrameRateWithPreset): (WebCore::AVVideoCaptureSource::setupSession): (WebCore::AVVideoCaptureSource::frameDurationForFrameRate): (WebCore::AVVideoCaptureSource::setupCaptureSession): (WebCore::AVVideoCaptureSource::captureSessionIsRunningDidChange): (WebCore::AVVideoCaptureSource::captureDeviceSuspendedDidChange): (WebCore::AVVideoCaptureSource::captureSessionRuntimeError): (WebCore::AVVideoCaptureSource::captureSessionBeginInterruption): (WebCore::AVVideoCaptureSource::captureSessionEndInterruption): (WebCore::AVVideoCaptureSource::deviceDisconnected): (-[WebCoreAVVideoCaptureSourceObserver observeValueForKeyPath:ofObject:change:context:]): (-[WebCoreAVVideoCaptureSourceObserver deviceConnectedDidChange:]): (-[WebCoreAVVideoCaptureSourceObserver sessionRuntimeError:]): (-[WebCoreAVVideoCaptureSourceObserver beginSessionInterrupted:]): (-[WebCoreAVVideoCaptureSourceObserver endSessionInterrupted:]): (WebCore::AVVideoCaptureSource::initializeSession): Deleted. * platform/mediastream/mac/CoreAudioCaptureSource.cpp: (WebCore::CoreAudioSharedUnit::setupAudioUnit): (WebCore::CoreAudioSharedUnit::verifyIsCapturing): (WebCore::CoreAudioSharedUnit::captureFailed): (WebCore::CoreAudioCaptureSource::initializeToStartProducingData): (WebCore::CoreAudioCaptureSource::addEchoCancellationSource): (WebCore::CoreAudioCaptureSource::removeEchoCancellationSource): (WebCore::CoreAudioCaptureSource::startProducingData): (WebCore::CoreAudioCaptureSource::stopProducingData): (WebCore::CoreAudioCaptureSource::scheduleReconfiguration): (WebCore::CoreAudioCaptureSource::beginInterruption): (WebCore::CoreAudioCaptureSource::endInterruption): * platform/mediastream/mac/CoreAudioCaptureSource.h: * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h: * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm: (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream): (WebCore::ScreenDisplayCaptureSourceMac::startProducingData): (WebCore::ScreenDisplayCaptureSourceMac::stopProducingData): (WebCore::ScreenDisplayCaptureSourceMac::startDisplayStream): Source/WTF: Reviewed by Youenn Fablet. * wtf/LoggerHelper.h: Add LOG_IF variants that check a condition before logging. Canonical link: https://commits.webkit.org/210116@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243033 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-03-16 05:21:43 +00:00
* Copyright (C) 2013 Nokia Corporation and/or its subsidiary(-ies).
* Copyright (C) 2015 Ericsson AB. All rights reserved.
* Copyright (C) 2013-2019 Apple Inc. All rights reserved.
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
[MediaStream] Clean up MediaStream private interfaces https://bugs.webkit.org/show_bug.cgi?id=149381 Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrack): (WebCore::MediaStream::didRemoveTrack): (WebCore::MediaStream::registry): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::didAddTrackToPrivate): Deleted. (WebCore::MediaStream::didRemoveTrackFromPrivate): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamRegistry.cpp: (WebCore::MediaStreamRegistry::lookup): (WebCore::MediaStreamRegistry::MediaStreamRegistry): * Modules/mediastream/MediaStreamRegistry.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::removeObserver): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::trackStatesChanged): (WebCore::MediaStreamTrack::configureTrackRendering): * Modules/mediastream/MediaStreamTrack.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::supportsType): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::load): * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.h: * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.mm: (WebCore::MediaStreamPrivateAVFObjC::create): (WebCore::MediaStreamPrivateAVFObjC::MediaStreamPrivateAVFObjC): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::~MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivateClient::~MediaStreamPrivateClient): (WebCore::MediaStreamPrivate::id): (WebCore::MediaStreamPrivate::active): (WebCore::MediaStreamPrivate::MediaStreamPrivate): Deleted. (WebCore::MediaStreamPrivate::~MediaStreamPrivate): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceStatesChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::~Observer): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::startProducingData): (WebCore::MediaStreamTrackPrivate::stopProducingData): (WebCore::MediaStreamTrackPrivate::setMuted): (WebCore::MediaStreamTrackPrivateClient::~MediaStreamTrackPrivateClient): Deleted. (WebCore::MediaStreamTrackPrivate::setClient): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/MediaStreamTrackSourcesRequestClient.h: (WebCore::TrackSourceInfo::create): (WebCore::TrackSourceInfo::id): (WebCore::TrackSourceInfo::label): (WebCore::TrackSourceInfo::groupId): (WebCore::TrackSourceInfo::kind): (WebCore::TrackSourceInfo::TrackSourceInfo): (WebCore::TrackSourceInfo::deviceId): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::statesDidChanged): (WebCore::RealtimeMediaSource::readonly): * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::id): (WebCore::RealtimeMediaSource::persistentId): (WebCore::RealtimeMediaSource::setPersistentId): (WebCore::RealtimeMediaSource::type): (WebCore::RealtimeMediaSource::stopped): * platform/mediastream/RealtimeMediaSourceCenter.h: * platform/mediastream/mac/AVCaptureDeviceManager.mm: (WebCore::AVCaptureDeviceManager::getSourcesInfo): * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp: (WebCore::RealtimeMediaSourceCenterMac::~RealtimeMediaSourceCenterMac): (WebCore::RealtimeMediaSourceCenterMac::validateRequestConstraints): (WebCore::RealtimeMediaSourceCenterMac::createMediaStream): (WebCore::RealtimeMediaSourceCenterMac::getMediaStreamTrackSources): * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h: * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::~RealtimeMediaSourceCenterOwr): (WebCore::RealtimeMediaSourceCenterOwr::validateRequestConstraints): * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h: * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::registerMockRealtimeMediaSourceCenter): (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints): (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): (WebCore::MockRealtimeMediaSourceCenter::getMediaStreamTrackSources): * platform/mock/MockRealtimeMediaSourceCenter.h: Canonical link: https://commits.webkit.org/167504@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190072 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-09-21 20:09:51 +00:00
#include "MediaStreamTrackPrivate.h"
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
#if ENABLE(MEDIA_STREAM)
[MediaStream] VideoTrack should respond to MediaStreamTrack state changes https://bugs.webkit.org/show_bug.cgi?id=151299 Reviewed by Jer Noble. Source/WebCore: Test: fast/mediastream/MediaStream-video-element-track-stop.html * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::ended): Check m_ended. (WebCore::MediaStreamTrack::stopProducingData): Set m_ended before telling private track to stop so we won't fire an 'ended' event. (WebCore::MediaStreamTrack::trackEnded): Set m_ended, add comments from spec. * Modules/mediastream/MediaStreamTrack.h: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Live streams have infinite duration, not indefinite. * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformLayer): Return NULL when displayMode is None. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Calculate current displayMode based on MediaStream state. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode): Renamed from setPausedImageVisible, use m_displayMode. Don't start/stop clock, it makes more sense to do that in play and pause. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): Start clock. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): Stop clock. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): Call updateDisplayMode. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::activeStatusChanged): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateIntrinsicSize): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::createPreviewLayers): Always try to create both layers if necessary. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::renderingModeChanged): New, update displayMode and call back to the media element. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): Get rid of some unused locals. React to a change in the enabled video track. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext): Paint black when the active video track is disabled. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setPausedImageVisible): Deleted. * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::updateActiveState): Split the logic of updating the active video track out into updateActiveVideoTrack. (WebCore::MediaStreamPrivate::hasVideo): Check for track.ended. (WebCore::MediaStreamPrivate::hasAudio): Ditto. (WebCore::MediaStreamPrivate::paintCurrentFrameInContext): Don't call the source directly. (WebCore::MediaStreamPrivate::updateActiveVideoTrack): New. (WebCore::MediaStreamPrivate::trackEnabledChanged): Call updateActiveVideoTrack. (WebCore::MediaStreamPrivate::trackEnded): new. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::setEnabled): Call observers if enabled state changes. (WebCore::MediaStreamTrackPrivate::endTrack): Call observers. (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): New. (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): Add comments. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::paintCurrentFrameInContext): Remove a commented-out line. LayoutTests: * fast/mediastream/MediaStream-video-element-expected.txt: * fast/mediastream/MediaStream-video-element-track-stop-expected.txt: Added. * fast/mediastream/MediaStream-video-element-track-stop.html: Added. * fast/mediastream/MediaStream-video-element.html: * platform/gtk/TestExpectations: Skip new test. * platform/ios-simulator/TestExpectations: Ditto. * platform/mac-wk2/TestExpectations: Ditto. * platform/win/TestExpectations: Ditto. Canonical link: https://commits.webkit.org/169494@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@192503 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-11-17 02:52:16 +00:00
#include "GraphicsContext.h"
#include "IntRect.h"
#include "Logging.h"
Add support for AudioSession handling in GPUProcess for capture https://bugs.webkit.org/show_bug.cgi?id=207950 Reviewed by Eric Carlson. Source/WebCore: Add a dedicated interface for handling audio capture in session manager. This was previoulsy PlatformMediaSessionClient, but this one is more related to audio/video rendering. Use this new interface for MediaStreamTrack capture sources. The session manager now owns a WeakHashSet of capture sources to compute the correct AudioSession category. Modernize the code, for instance use an enum class for MediaType to remove some debug asserts. Add a new PlatformMediaSessionManager::create that is used for sharedManager. Remove the direct use of PlatformMediaSessionManager::sharedManager from classes that can be used outside of WebProcess. This includes BaseAudioSharedUnit, for which we add a audioUnitWillStart callback so that we compute the right AudioSession category before starting the capture. Covered by existing tests and debug assertions to check for AudioSession category computation. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::isCapturingAudio const): * Modules/mediastream/MediaStreamTrack.h: * Modules/webaudio/AudioContext.h: * html/HTMLAudioElement.h: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::shouldDisableSleep const): (WebCore::HTMLMediaElement::mediaType const): (WebCore::HTMLMediaElement::presentationType const): * html/HTMLVideoElement.h: * html/MediaElementSession.cpp: (WebCore::MediaElementSession::canShowControlsManager const): * html/MediaElementSession.h: * platform/audio/PlatformMediaSession.cpp: (WebCore::PlatformMediaSession::PlatformMediaSession): (WebCore::PlatformMediaSession::activeAudioSessionRequired const): * platform/audio/PlatformMediaSession.h: * platform/audio/PlatformMediaSessionManager.cpp: (WebCore::sharedPlatformMediaSessionManager): (WebCore::PlatformMediaSessionManager::sharedManager): (WebCore::PlatformMediaSessionManager::sharedManagerIfExists): (WebCore::PlatformMediaSessionManager::create): (WebCore::indexFromMediaType): (WebCore::PlatformMediaSessionManager::resetRestrictions): (WebCore::PlatformMediaSessionManager::has const): (WebCore::PlatformMediaSessionManager::count const): (WebCore::PlatformMediaSessionManager::countActiveAudioCaptureSources): (WebCore::PlatformMediaSessionManager::addRestriction): (WebCore::PlatformMediaSessionManager::removeRestriction): (WebCore::PlatformMediaSessionManager::restrictions): (WebCore::PlatformMediaSessionManager::sessionWillBeginPlayback): (WebCore::PlatformMediaSessionManager::applicationWillBecomeInactive): (WebCore::PlatformMediaSessionManager::applicationDidBecomeActive): (WebCore::PlatformMediaSessionManager::applicationDidEnterBackground): (WebCore::PlatformMediaSessionManager::applicationWillEnterForeground): (WebCore::PlatformMediaSessionManager::sessionIsPlayingToWirelessPlaybackTargetChanged): (WebCore::PlatformMediaSessionManager::addAudioCaptureSource): (WebCore::PlatformMediaSessionManager::removeAudioCaptureSource): * platform/audio/PlatformMediaSessionManager.h: * platform/audio/cocoa/MediaSessionManagerCocoa.mm: (PlatformMediaSessionManager::create): (MediaSessionManagerCocoa::updateSessionState): * platform/audio/ios/MediaSessionManagerIOS.mm: (WebCore::PlatformMediaSessionManager::create): (WebCore::MediaSessionManageriOS::resetRestrictions): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::audioUnitWillStart): * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/BaseAudioSharedUnit.cpp: (WebCore::BaseAudioSharedUnit::startUnit): * platform/mediastream/mac/BaseAudioSharedUnit.h: * platform/mediastream/mac/CoreAudioCaptureSource.cpp: (WebCore::CoreAudioCaptureSource::audioUnitWillStart): * platform/mediastream/mac/CoreAudioCaptureSource.h: * testing/Internals.cpp: (WebCore::mediaTypeFromString): (WebCore::Internals::setMediaSessionRestrictions): (WebCore::Internals::mediaSessionRestrictions const): Source/WebKit: Create a session manager for the GPUConnectionToWebProcess. Pass it to any audio capture source proxy. For UIProcesss audio capture, we still use the shared manager. * GPUProcess/GPUConnectionToWebProcess.cpp: (WebKit::GPUConnectionToWebProcess::sessionManager): * GPUProcess/GPUConnectionToWebProcess.h: * GPUProcess/GPUProcess.cpp: (WebKit::GPUProcess::setMockCaptureDevicesEnabled): * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::SourceProxy::SourceProxy): (WebKit::UserMediaCaptureManagerProxy::SourceProxy::~SourceProxy): (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints): (WebKit::UserMediaCaptureManagerProxy::clone): * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h: * UIProcess/WebProcessProxy.cpp: LayoutTests: * platform/ios/TestExpectations: Canonical link: https://commits.webkit.org/220952@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@257039 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-02-20 03:51:21 +00:00
#include "PlatformMediaSessionManager.h"
Move UUID from WebCore/platform to WTF https://bugs.webkit.org/show_bug.cgi?id=171372 Reviewed by Michael Catanzaro. Source/WebCore: UUID only contains createCanonicalUUIDString() that is platform independent and doesn't depend on anything from WebCore, only from WTF. * CMakeLists.txt: * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp: * Modules/mediacontrols/MediaControlsHost.cpp: * Modules/mediastream/RTCPeerConnection.cpp: * Modules/webaudio/MediaStreamAudioSource.cpp: * Modules/webdatabase/DatabaseTracker.cpp: * WebCore.order: * WebCore.xcodeproj/project.pbxproj: * editing/mac/EditorMac.mm: * fileapi/BlobURL.cpp: * loader/appcache/ApplicationCacheHost.cpp: * loader/appcache/ApplicationCacheStorage.cpp: * platform/URL.cpp: * platform/glib/FileSystemGlib.cpp: * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp: * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm: * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm: * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm: * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp: * platform/mediastream/CaptureDeviceManager.cpp: * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: * platform/mediastream/RealtimeMediaSource.cpp: * platform/mediastream/mac/AVCaptureDeviceManager.mm: * platform/mediastream/mac/AVMediaCaptureSource.mm: * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: * platform/mock/MockRealtimeAudioSource.cpp: * platform/mock/MockRealtimeMediaSourceCenter.cpp: * platform/mock/MockRealtimeVideoSource.cpp: * testing/MockCDMFactory.cpp: Source/WebKit2: * UIProcess/Automation/WebAutomationSession.cpp: (WebKit::WebAutomationSession::handleForWebPageProxy): (WebKit::WebAutomationSession::handleForWebFrameID): * UIProcess/gtk/WaylandCompositor.cpp: * WebProcess/Automation/WebAutomationSessionProxy.cpp: (WebKit::createUUID): * WebProcess/Plugins/PDF/PDFPlugin.mm: (WebKit::PDFPlugin::openWithNativeApplication): Source/WTF: * WTF.xcodeproj/project.pbxproj: * wtf/CMakeLists.txt: * wtf/UUID.cpp: Renamed from Source/WebCore/platform/UUID.cpp. * wtf/UUID.h: Renamed from Source/WebCore/platform/UUID.h. Tools: * WebKitTestRunner/TestController.cpp: Canonical link: https://commits.webkit.org/188316@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215922 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-28 06:30:17 +00:00
#include <wtf/UUID.h>
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
A cloned MediaStreamTrack should mute independently other tracks using the same source https://bugs.webkit.org/show_bug.cgi?id=172831 <rdar://problem/32518527> Patch by Youenn Fablet <youenn@apple.com> on 2017-06-19 Reviewed by Eric Carlson. Source/WebCore: Test: webrtc/clone-audio-track.html Move enabled handling in MediaStreamTrackPrivate instead of RealtimeMediaSource. Move WebRTC and WebAudio customers of RealtimeMediaSource to MediaStreamTrackPrivate. Move creation of WebAudio provider to MediaStreamTrackPrivate. This allows changing some parameters of tracks having the same source independently. Using this for enabled track attribute. We no longer stop generating frames in case track is disabled. This should be added back as an optimization in a follow-up. * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: (WebCore::LibWebRTCMediaEndpoint::addTrack): * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: (WebCore::LibWebRTCPeerConnectionBackend::replaceTrack): * Modules/webaudio/MediaStreamAudioSource.cpp: * Modules/webaudio/MediaStreamAudioSource.h: * WebCore.xcodeproj/project.pbxproj: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::audioSourceProvider): (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::removeObserver): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AVMediaCaptureSource.h: * platform/mediastream/mac/AVMediaCaptureSource.mm: * platform/mediastream/mac/CoreAudioCaptureSource.cpp: (WebCore::CoreAudioCaptureSource::startProducingData): (WebCore::CoreAudioCaptureSource::stopProducingData): * platform/mediastream/mac/CoreAudioCaptureSource.h: * platform/mediastream/mac/MockRealtimeAudioSourceMac.h: * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm: (WebCore::MockRealtimeAudioSourceMac::render): * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp: (WebCore::RealtimeIncomingAudioSource::~RealtimeIncomingAudioSource): (WebCore::RealtimeIncomingAudioSource::OnData): * platform/mediastream/mac/RealtimeIncomingAudioSource.h: * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp: (WebCore::RealtimeIncomingVideoSource::pixelBufferFromVideoFrame): * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp: (WebCore::RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource): (WebCore::RealtimeOutgoingAudioSource::setSource): * platform/mediastream/mac/RealtimeOutgoingAudioSource.h: * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp: (WebCore::RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource): (WebCore::RealtimeOutgoingVideoSource::setSource): (WebCore::RealtimeOutgoingVideoSource::initializeFromSource): * platform/mediastream/mac/RealtimeOutgoingVideoSource.h: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: (WebCore::WebAudioSourceProviderAVFObjC::create): (WebCore::WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC): (WebCore::WebAudioSourceProviderAVFObjC::setClient): (WebCore::WebAudioSourceProviderAVFObjC::audioSamplesAvailable): * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::generateFrame): * platform/spi/cocoa/PassKitSPI.h: Source/WebKit2: * WebProcess/cocoa/UserMediaCaptureManager.cpp: (WebKit::UserMediaCaptureManager::Source::setStorage): LayoutTests: * webrtc/clone-audio-track.html: Added. * webrtc/video-disabled-black.html: * webrtc/video-unmute-expected.txt: * webrtc/video-unmute.html: Canonical link: https://commits.webkit.org/190441@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@218497 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-06-19 17:12:57 +00:00
#if PLATFORM(COCOA)
Introduce a RemoteAudioSourceProvider to receive audio samples for web audio from GPUProcess https://bugs.webkit.org/show_bug.cgi?id=217710 Reviewed by Eric Carlson. Source/WebCore: Split WebAudioSourceProviderAVFObjC MediaStreamTrack specific bits in a separate MediaStreamTrackAudioSourceProviderAVFObjC class. This allows reusing WebAudioSourceProviderAVFObjC for samples coming from audio playback living in GPUProcess. No change of behavior. * SourcesCocoa.txt: * WebCore.xcodeproj/project.pbxproj: * platform/audio/cocoa/AudioSampleBufferList.cpp: * platform/audio/cocoa/AudioSampleBufferList.h: * platform/audio/cocoa/AudioSampleDataSource.h: * platform/audio/cocoa/AudioSampleDataSource.mm: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::audioSourceProvider): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/WebAudioSourceProvider.h: * platform/mediastream/mac/CoreAudioCaptureSource.cpp: * platform/mediastream/mac/MediaStreamTrackAudioSourceProviderCocoa.cpp: Added. (WebCore::MediaStreamTrackAudioSourceProviderCocoa::create): (WebCore::MediaStreamTrackAudioSourceProviderCocoa::MediaStreamTrackAudioSourceProviderCocoa): (WebCore::MediaStreamTrackAudioSourceProviderCocoa::~MediaStreamTrackAudioSourceProviderCocoa): (WebCore::MediaStreamTrackAudioSourceProviderCocoa::hasNewClient): (WebCore::MediaStreamTrackAudioSourceProviderCocoa::trackEnabledChanged): (WebCore::MediaStreamTrackAudioSourceProviderCocoa::audioSamplesAvailable): * platform/mediastream/mac/MediaStreamTrackAudioSourceProviderCocoa.h: Added. * platform/mediastream/mac/MockAudioSharedUnit.h: * platform/mediastream/mac/MockAudioSharedUnit.mm: * platform/mediastream/mac/WebAudioSourceProviderCocoa.h: Renamed from Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h. * platform/mediastream/mac/WebAudioSourceProviderCocoa.mm: Renamed from Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm. (WebCore::WebAudioSourceProviderCocoa::WebAudioSourceProviderCocoa): (WebCore::WebAudioSourceProviderCocoa::~WebAudioSourceProviderCocoa): (WebCore::WebAudioSourceProviderCocoa::setClient): (WebCore::WebAudioSourceProviderCocoa::provideInput): (WebCore::WebAudioSourceProviderCocoa::prepare): (WebCore::WebAudioSourceProviderCocoa::receivedNewAudioSamples): Source/WebKit: Make use of WebAudioSourceProviderAVFObjC to implement RemoteAudioSourceProvider. RemoteAudioSourceProvider currently implements an AudioSourceProvider but it is not yet connected to GPUProcess media players. This will be implemented in a follow-up. * SourcesCocoa.txt: * WebKit.xcodeproj/project.pbxproj: * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp: (WebKit::MediaPlayerPrivateRemote::~MediaPlayerPrivateRemote): (WebKit::MediaPlayerPrivateRemote::audioSourceProvider): * WebProcess/GPU/media/MediaPlayerPrivateRemote.h: * WebProcess/GPU/media/RemoteAudioSourceProvider.cpp: Added. (WebKit::RemoteAudioSourceProvider::create): (WebKit::RemoteAudioSourceProvider::RemoteAudioSourceProvider): (WebKit::RemoteAudioSourceProvider::~RemoteAudioSourceProvider): (WebKit::RemoteAudioSourceProvider::close): (WebKit::RemoteAudioSourceProvider::hasNewClient): (WebKit::RemoteAudioSourceProvider::audioSamplesAvailable): (WebKit::RemoteAudioSourceProvider::logChannel const): * WebProcess/GPU/media/RemoteAudioSourceProvider.h: Added. * WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm: Canonical link: https://commits.webkit.org/230492@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@268521 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-10-15 11:36:46 +00:00
#include "MediaStreamTrackAudioSourceProviderCocoa.h"
[WPE][GTK] Implement WebAudioSourceProviderGStreamer to allow bridging MediaStream and the WebAudio APIs https://bugs.webkit.org/show_bug.cgi?id=186933 Source/WebCore: Reusing the AudioSourceProviderGStreamer itself as it was doing almost everything we needed, just added a constructor to be able to create it from a MediaStreamTrackPrivate and made it a WebAudioSourceProvider which only means it is now a ThreadSafeRefCounted. Sensibily refactored GStreamerMediaStreamSource so that we could reuse it to track a single MediaStreamTrack. Patch by Thibault Saunier <tsaunier@igalia.com> on 2018-12-07 Reviewed by Philippe Normand. Enabled all tests depending on that feature. * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp: (WebCore::AudioSourceProviderGStreamer::AudioSourceProviderGStreamer): (WebCore::AudioSourceProviderGStreamer::~AudioSourceProviderGStreamer): (WebCore::AudioSourceProviderGStreamer::setClient): * platform/audio/gstreamer/AudioSourceProviderGStreamer.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::audioSourceProvider): * platform/mediastream/gstreamer/GStreamerAudioCapturer.cpp: (WebCore::GStreamerAudioCapturer::GStreamerAudioCapturer): * platform/mediastream/gstreamer/GStreamerAudioStreamDescription.h: * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp: (WebCore::webkitMediaStreamSrcSetupSrc): (WebCore::webkitMediaStreamSrcSetupAppSrc): (WebCore::webkitMediaStreamSrcAddTrack): (WebCore::webkitMediaStreamSrcSetStream): (WebCore::webkitMediaStreamSrcNew): * platform/mediastream/gstreamer/GStreamerMediaStreamSource.h: * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.cpp: (WebCore::WrappedMockRealtimeAudioSource::WrappedMockRealtimeAudioSource): (WebCore::WrappedMockRealtimeAudioSource::start): (WebCore::WrappedMockRealtimeAudioSource::addHum): (WebCore::WrappedMockRealtimeAudioSource::render): (WebCore::WrappedMockRealtimeAudioSource::settingsDidChange): (WebCore::MockGStreamerAudioCaptureSource::startProducingData): * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp: (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::pullAudioData): Handle the case where input buffers are "big" and process all the data we can for each runs of the method. LayoutTests: Patch by Thibault Saunier <tsaunier@igalia.com> on 2018-12-07 Reviewed by Philippe Normand. Enabled all tests depending on that feature. * platform/gtk/TestExpectations: * webrtc/clone-audio-track.html: Canonical link: https://commits.webkit.org/207075@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@238951 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-12-07 10:48:56 +00:00
#elif ENABLE(WEB_AUDIO) && ENABLE(MEDIA_STREAM) && USE(LIBWEBRTC) && USE(GSTREAMER)
#include "AudioSourceProviderGStreamer.h"
A cloned MediaStreamTrack should mute independently other tracks using the same source https://bugs.webkit.org/show_bug.cgi?id=172831 <rdar://problem/32518527> Patch by Youenn Fablet <youenn@apple.com> on 2017-06-19 Reviewed by Eric Carlson. Source/WebCore: Test: webrtc/clone-audio-track.html Move enabled handling in MediaStreamTrackPrivate instead of RealtimeMediaSource. Move WebRTC and WebAudio customers of RealtimeMediaSource to MediaStreamTrackPrivate. Move creation of WebAudio provider to MediaStreamTrackPrivate. This allows changing some parameters of tracks having the same source independently. Using this for enabled track attribute. We no longer stop generating frames in case track is disabled. This should be added back as an optimization in a follow-up. * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: (WebCore::LibWebRTCMediaEndpoint::addTrack): * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: (WebCore::LibWebRTCPeerConnectionBackend::replaceTrack): * Modules/webaudio/MediaStreamAudioSource.cpp: * Modules/webaudio/MediaStreamAudioSource.h: * WebCore.xcodeproj/project.pbxproj: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::audioSourceProvider): (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::removeObserver): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AVMediaCaptureSource.h: * platform/mediastream/mac/AVMediaCaptureSource.mm: * platform/mediastream/mac/CoreAudioCaptureSource.cpp: (WebCore::CoreAudioCaptureSource::startProducingData): (WebCore::CoreAudioCaptureSource::stopProducingData): * platform/mediastream/mac/CoreAudioCaptureSource.h: * platform/mediastream/mac/MockRealtimeAudioSourceMac.h: * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm: (WebCore::MockRealtimeAudioSourceMac::render): * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp: (WebCore::RealtimeIncomingAudioSource::~RealtimeIncomingAudioSource): (WebCore::RealtimeIncomingAudioSource::OnData): * platform/mediastream/mac/RealtimeIncomingAudioSource.h: * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp: (WebCore::RealtimeIncomingVideoSource::pixelBufferFromVideoFrame): * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp: (WebCore::RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource): (WebCore::RealtimeOutgoingAudioSource::setSource): * platform/mediastream/mac/RealtimeOutgoingAudioSource.h: * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp: (WebCore::RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource): (WebCore::RealtimeOutgoingVideoSource::setSource): (WebCore::RealtimeOutgoingVideoSource::initializeFromSource): * platform/mediastream/mac/RealtimeOutgoingVideoSource.h: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: (WebCore::WebAudioSourceProviderAVFObjC::create): (WebCore::WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC): (WebCore::WebAudioSourceProviderAVFObjC::setClient): (WebCore::WebAudioSourceProviderAVFObjC::audioSamplesAvailable): * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::generateFrame): * platform/spi/cocoa/PassKitSPI.h: Source/WebKit2: * WebProcess/cocoa/UserMediaCaptureManager.cpp: (WebKit::UserMediaCaptureManager::Source::setStorage): LayoutTests: * webrtc/clone-audio-track.html: Added. * webrtc/video-disabled-black.html: * webrtc/video-unmute-expected.txt: * webrtc/video-unmute.html: Canonical link: https://commits.webkit.org/190441@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@218497 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-06-19 17:12:57 +00:00
#else
#include "WebAudioSourceProvider.h"
#endif
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
namespace WebCore {
Cloning a MediaStreamTrack does not clone the logger https://bugs.webkit.org/show_bug.cgi?id=198844 Reviewed by Eric Carlson. Source/WebCore: Make MediaStream and MediaStreamTrack rely on their private versions for logging. Move from a RefPtr version to a Ref so as to forbid nullptr crashes. Make sure that RealtimeIncomingAudioSource and RealtimeIncomingVideoSource check for their logger before logging. Covered by existing tests and updated test. * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp: (WebCore::loggerFromContext): (WebCore::CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack): * Modules/mediastream/MediaStream.cpp: (WebCore::loggerFromContext): (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::allow): * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: (WebCore::LibWebRTCMediaEndpoint::mediaStreamFromRTCStream): * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: (WebCore::LibWebRTCPeerConnectionBackend::createReceiverForSource): * Modules/webaudio/MediaStreamAudioDestinationNode.cpp: (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::setLogger): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::setLogger): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSourceCenter.cpp: (WebCore::RealtimeMediaSourceCenter::createMediaStream): * platform/mediastream/RealtimeMediaSourceCenter.h: * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp: (WebCore::RealtimeIncomingAudioSourceCocoa::OnData): * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm: (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferPool): (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferFromVideoFrame): (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame): LayoutTests: * fast/mediastream/MediaStreamTrack-clone-expected.txt: * fast/mediastream/MediaStreamTrack-clone.html: Canonical link: https://commits.webkit.org/212833@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246436 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-06-14 17:14:47 +00:00
Ref<MediaStreamTrackPrivate> MediaStreamTrackPrivate::create(Ref<const Logger>&& logger, Ref<RealtimeMediaSource>&& source)
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
{
Cloning a MediaStreamTrack does not clone the logger https://bugs.webkit.org/show_bug.cgi?id=198844 Reviewed by Eric Carlson. Source/WebCore: Make MediaStream and MediaStreamTrack rely on their private versions for logging. Move from a RefPtr version to a Ref so as to forbid nullptr crashes. Make sure that RealtimeIncomingAudioSource and RealtimeIncomingVideoSource check for their logger before logging. Covered by existing tests and updated test. * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp: (WebCore::loggerFromContext): (WebCore::CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack): * Modules/mediastream/MediaStream.cpp: (WebCore::loggerFromContext): (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::allow): * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: (WebCore::LibWebRTCMediaEndpoint::mediaStreamFromRTCStream): * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: (WebCore::LibWebRTCPeerConnectionBackend::createReceiverForSource): * Modules/webaudio/MediaStreamAudioDestinationNode.cpp: (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::setLogger): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::setLogger): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSourceCenter.cpp: (WebCore::RealtimeMediaSourceCenter::createMediaStream): * platform/mediastream/RealtimeMediaSourceCenter.h: * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp: (WebCore::RealtimeIncomingAudioSourceCocoa::OnData): * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm: (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferPool): (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferFromVideoFrame): (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame): LayoutTests: * fast/mediastream/MediaStreamTrack-clone-expected.txt: * fast/mediastream/MediaStreamTrack-clone.html: Canonical link: https://commits.webkit.org/212833@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246436 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-06-14 17:14:47 +00:00
return create(WTFMove(logger), WTFMove(source), createCanonicalUUIDString());
WebRTC: Update the MediaStream API https://bugs.webkit.org/show_bug.cgi?id=146313 Reviewed by Eric Carlson. Source/WebCore: Update the MediaStream API (MediaStream, MediaStreamTrack and RealtimeMediaSource) to match the Media Capture and Stream specification [1]. Notable changes: Updated event handling to synchronously update corresponding state/attributes as events are dispatched. Removed 'new' state from MediaStreamTrack. A track is either 'live' or 'ended'. As a consequence 'started' event is also removed. MediaStreamTrack always has a source (disconnected source concept was removed from the spec). Therefore, more state can be kept at the source without going away. Calculate MediaStream.active internally, from the track set, instead of setting it externally. Updated RealtimeMediaSource Observer interface. Replaced MediaStream's separate audio and video track lists with a single track set (more aligned with spec). Updated MediaStream constructor to adopt instead of clone track arguments (or tracks from MediaStream argument). Removed MediaStreamTrack.getSources() and corresponding test (removed from spec). Test status: 3 added, 8 existing enabled (some updated) and 1 removed. [1] http://w3c.github.io/mediacapture-main/archives/20150523/getusermedia.html Tests: fast/mediastream/MediaStreamTrack-clone.html fast/mediastream/MediaStreamTrack-kind.html fast/mediastream/MediaStreamTrack-stop.html * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::contextDestroyed): (WebCore::MediaStream::trackDidEnd): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrackToPrivate): (WebCore::MediaStream::didRemoveTrackFromPrivate): (WebCore::MediaStream::internalAddTrack): (WebCore::MediaStream::internalRemoveTrack): (WebCore::MediaStream::scheduleActiveStateChange): (WebCore::MediaStream::activityEventTimerFired): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::~MediaStream): Deleted. (WebCore::MediaStream::registry): Deleted. (WebCore::MediaStream::addObserver): Deleted. (WebCore::MediaStream::removeObserver): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStream.idl: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::id): (WebCore::MediaStreamTrack::label): (WebCore::MediaStreamTrack::enabled): (WebCore::MediaStreamTrack::setEnabled): (WebCore::MediaStreamTrack::muted): (WebCore::MediaStreamTrack::readonly): (WebCore::MediaStreamTrack::remote): (WebCore::MediaStreamTrack::readyState): (WebCore::MediaStreamTrack::ended): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::getCapabilities): (WebCore::MediaStreamTrack::applyConstraints): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::stop): (WebCore::MediaStreamTrack::getConstraints): Deleted. (WebCore::MediaStreamTrack::addObserver): Deleted. (WebCore::MediaStreamTrack::removeObserver): Deleted. (WebCore::MediaStreamTrack::configureTrackRendering): Deleted. (WebCore::MediaStreamTrack::activeDOMObjectName): Deleted. (WebCore::MediaStreamTrack::canSuspendForPageCache): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: * Modules/mediastream/RTCPeerConnection.cpp: (WebCore::RTCPeerConnection::didRemoveRemoteStream): Deleted. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::didCreateStream): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::updateActiveState): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivate::active): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::type): (WebCore::MediaStreamTrackPrivate::applyConstraints): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::muted): Deleted. (WebCore::MediaStreamTrackPrivate::readonly): Deleted. (WebCore::MediaStreamTrackPrivate::remote): Deleted. (WebCore::MediaStreamTrackPrivate::constraints): Deleted. (WebCore::MediaStreamTrackPrivate::states): Deleted. (WebCore::MediaStreamTrackPrivate::capabilities): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::id): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::enabled): (WebCore::MediaStreamTrackPrivate::setClient): (WebCore::MediaStreamTrackPrivate::source): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::readonly): (WebCore::RealtimeMediaSource::stop): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::addObserver): Deleted. (WebCore::RealtimeMediaSource::removeObserver): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::stopped): (WebCore::RealtimeMediaSource::id): Deleted. (WebCore::RealtimeMediaSource::muted): Deleted. (WebCore::RealtimeMediaSource::setReadonly): Deleted. * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream): Deleted. * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): Deleted. LayoutTests: Test status: 3 added, 8 existing enabled (some updated) and 1 removed. * TestExpectations: * fast/mediastream/MediaStream-add-ended-tracks-expected.txt: * fast/mediastream/MediaStream-add-ended-tracks.html: * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: * fast/mediastream/MediaStream-add-remove-tracks.html: * fast/mediastream/MediaStream-add-tracks-to-inactive-stream.html: * fast/mediastream/MediaStream-clone-expected.txt: Added. * fast/mediastream/MediaStream-clone.html: * fast/mediastream/MediaStream-construct-with-ended-tracks-expected.txt: Added. * fast/mediastream/MediaStream-construct-with-ended-tracks.html: * fast/mediastream/MediaStream-getTracks-expected.txt: * fast/mediastream/MediaStream-getTracks.html: * fast/mediastream/MediaStreamConstructor.html: * fast/mediastream/MediaStreamTrack-clone-expected.txt: Added. * fast/mediastream/MediaStreamTrack-clone.html: Added. * fast/mediastream/MediaStreamTrack-getSources-expected.txt: Removed. * fast/mediastream/MediaStreamTrack-getSources.html: Removed. Tested method removed from spec. * fast/mediastream/MediaStreamTrack-kind-expected.txt: Added. * fast/mediastream/MediaStreamTrack-kind.html: Added. * fast/mediastream/MediaStreamTrack-stop-expected.txt: Added. * fast/mediastream/MediaStreamTrack-stop.html: Added. * fast/mediastream/MediaStreamTrackEvent-constructor-expected.txt: * fast/mediastream/MediaStreamTrackEvent-constructor.html: * fast/mediastream/resources/getUserMedia-helper.js: Added. (.reject): (getUserMedia): (defaultRejectOrCatch): * platform/gtk/TestExpectations: Canonical link: https://commits.webkit.org/164511@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@186081 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-06-29 19:52:21 +00:00
}
Cloning a MediaStreamTrack does not clone the logger https://bugs.webkit.org/show_bug.cgi?id=198844 Reviewed by Eric Carlson. Source/WebCore: Make MediaStream and MediaStreamTrack rely on their private versions for logging. Move from a RefPtr version to a Ref so as to forbid nullptr crashes. Make sure that RealtimeIncomingAudioSource and RealtimeIncomingVideoSource check for their logger before logging. Covered by existing tests and updated test. * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp: (WebCore::loggerFromContext): (WebCore::CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack): * Modules/mediastream/MediaStream.cpp: (WebCore::loggerFromContext): (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::allow): * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: (WebCore::LibWebRTCMediaEndpoint::mediaStreamFromRTCStream): * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: (WebCore::LibWebRTCPeerConnectionBackend::createReceiverForSource): * Modules/webaudio/MediaStreamAudioDestinationNode.cpp: (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::setLogger): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::setLogger): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSourceCenter.cpp: (WebCore::RealtimeMediaSourceCenter::createMediaStream): * platform/mediastream/RealtimeMediaSourceCenter.h: * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp: (WebCore::RealtimeIncomingAudioSourceCocoa::OnData): * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm: (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferPool): (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferFromVideoFrame): (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame): LayoutTests: * fast/mediastream/MediaStreamTrack-clone-expected.txt: * fast/mediastream/MediaStreamTrack-clone.html: Canonical link: https://commits.webkit.org/212833@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246436 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-06-14 17:14:47 +00:00
Ref<MediaStreamTrackPrivate> MediaStreamTrackPrivate::create(Ref<const Logger>&& logger, Ref<RealtimeMediaSource>&& source, String&& id)
WebRTC: Update the MediaStream API https://bugs.webkit.org/show_bug.cgi?id=146313 Reviewed by Eric Carlson. Source/WebCore: Update the MediaStream API (MediaStream, MediaStreamTrack and RealtimeMediaSource) to match the Media Capture and Stream specification [1]. Notable changes: Updated event handling to synchronously update corresponding state/attributes as events are dispatched. Removed 'new' state from MediaStreamTrack. A track is either 'live' or 'ended'. As a consequence 'started' event is also removed. MediaStreamTrack always has a source (disconnected source concept was removed from the spec). Therefore, more state can be kept at the source without going away. Calculate MediaStream.active internally, from the track set, instead of setting it externally. Updated RealtimeMediaSource Observer interface. Replaced MediaStream's separate audio and video track lists with a single track set (more aligned with spec). Updated MediaStream constructor to adopt instead of clone track arguments (or tracks from MediaStream argument). Removed MediaStreamTrack.getSources() and corresponding test (removed from spec). Test status: 3 added, 8 existing enabled (some updated) and 1 removed. [1] http://w3c.github.io/mediacapture-main/archives/20150523/getusermedia.html Tests: fast/mediastream/MediaStreamTrack-clone.html fast/mediastream/MediaStreamTrack-kind.html fast/mediastream/MediaStreamTrack-stop.html * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::contextDestroyed): (WebCore::MediaStream::trackDidEnd): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrackToPrivate): (WebCore::MediaStream::didRemoveTrackFromPrivate): (WebCore::MediaStream::internalAddTrack): (WebCore::MediaStream::internalRemoveTrack): (WebCore::MediaStream::scheduleActiveStateChange): (WebCore::MediaStream::activityEventTimerFired): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::~MediaStream): Deleted. (WebCore::MediaStream::registry): Deleted. (WebCore::MediaStream::addObserver): Deleted. (WebCore::MediaStream::removeObserver): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStream.idl: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::id): (WebCore::MediaStreamTrack::label): (WebCore::MediaStreamTrack::enabled): (WebCore::MediaStreamTrack::setEnabled): (WebCore::MediaStreamTrack::muted): (WebCore::MediaStreamTrack::readonly): (WebCore::MediaStreamTrack::remote): (WebCore::MediaStreamTrack::readyState): (WebCore::MediaStreamTrack::ended): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::getCapabilities): (WebCore::MediaStreamTrack::applyConstraints): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::stop): (WebCore::MediaStreamTrack::getConstraints): Deleted. (WebCore::MediaStreamTrack::addObserver): Deleted. (WebCore::MediaStreamTrack::removeObserver): Deleted. (WebCore::MediaStreamTrack::configureTrackRendering): Deleted. (WebCore::MediaStreamTrack::activeDOMObjectName): Deleted. (WebCore::MediaStreamTrack::canSuspendForPageCache): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: * Modules/mediastream/RTCPeerConnection.cpp: (WebCore::RTCPeerConnection::didRemoveRemoteStream): Deleted. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::didCreateStream): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::updateActiveState): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivate::active): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::type): (WebCore::MediaStreamTrackPrivate::applyConstraints): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::muted): Deleted. (WebCore::MediaStreamTrackPrivate::readonly): Deleted. (WebCore::MediaStreamTrackPrivate::remote): Deleted. (WebCore::MediaStreamTrackPrivate::constraints): Deleted. (WebCore::MediaStreamTrackPrivate::states): Deleted. (WebCore::MediaStreamTrackPrivate::capabilities): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::id): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::enabled): (WebCore::MediaStreamTrackPrivate::setClient): (WebCore::MediaStreamTrackPrivate::source): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::readonly): (WebCore::RealtimeMediaSource::stop): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::addObserver): Deleted. (WebCore::RealtimeMediaSource::removeObserver): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::stopped): (WebCore::RealtimeMediaSource::id): Deleted. (WebCore::RealtimeMediaSource::muted): Deleted. (WebCore::RealtimeMediaSource::setReadonly): Deleted. * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream): Deleted. * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): Deleted. LayoutTests: Test status: 3 added, 8 existing enabled (some updated) and 1 removed. * TestExpectations: * fast/mediastream/MediaStream-add-ended-tracks-expected.txt: * fast/mediastream/MediaStream-add-ended-tracks.html: * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: * fast/mediastream/MediaStream-add-remove-tracks.html: * fast/mediastream/MediaStream-add-tracks-to-inactive-stream.html: * fast/mediastream/MediaStream-clone-expected.txt: Added. * fast/mediastream/MediaStream-clone.html: * fast/mediastream/MediaStream-construct-with-ended-tracks-expected.txt: Added. * fast/mediastream/MediaStream-construct-with-ended-tracks.html: * fast/mediastream/MediaStream-getTracks-expected.txt: * fast/mediastream/MediaStream-getTracks.html: * fast/mediastream/MediaStreamConstructor.html: * fast/mediastream/MediaStreamTrack-clone-expected.txt: Added. * fast/mediastream/MediaStreamTrack-clone.html: Added. * fast/mediastream/MediaStreamTrack-getSources-expected.txt: Removed. * fast/mediastream/MediaStreamTrack-getSources.html: Removed. Tested method removed from spec. * fast/mediastream/MediaStreamTrack-kind-expected.txt: Added. * fast/mediastream/MediaStreamTrack-kind.html: Added. * fast/mediastream/MediaStreamTrack-stop-expected.txt: Added. * fast/mediastream/MediaStreamTrack-stop.html: Added. * fast/mediastream/MediaStreamTrackEvent-constructor-expected.txt: * fast/mediastream/MediaStreamTrackEvent-constructor.html: * fast/mediastream/resources/getUserMedia-helper.js: Added. (.reject): (getUserMedia): (defaultRejectOrCatch): * platform/gtk/TestExpectations: Canonical link: https://commits.webkit.org/164511@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@186081 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-06-29 19:52:21 +00:00
{
Cloning a MediaStreamTrack does not clone the logger https://bugs.webkit.org/show_bug.cgi?id=198844 Reviewed by Eric Carlson. Source/WebCore: Make MediaStream and MediaStreamTrack rely on their private versions for logging. Move from a RefPtr version to a Ref so as to forbid nullptr crashes. Make sure that RealtimeIncomingAudioSource and RealtimeIncomingVideoSource check for their logger before logging. Covered by existing tests and updated test. * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp: (WebCore::loggerFromContext): (WebCore::CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack): * Modules/mediastream/MediaStream.cpp: (WebCore::loggerFromContext): (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::allow): * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: (WebCore::LibWebRTCMediaEndpoint::mediaStreamFromRTCStream): * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: (WebCore::LibWebRTCPeerConnectionBackend::createReceiverForSource): * Modules/webaudio/MediaStreamAudioDestinationNode.cpp: (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::setLogger): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::setLogger): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSourceCenter.cpp: (WebCore::RealtimeMediaSourceCenter::createMediaStream): * platform/mediastream/RealtimeMediaSourceCenter.h: * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp: (WebCore::RealtimeIncomingAudioSourceCocoa::OnData): * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm: (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferPool): (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferFromVideoFrame): (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame): LayoutTests: * fast/mediastream/MediaStreamTrack-clone-expected.txt: * fast/mediastream/MediaStreamTrack-clone.html: Canonical link: https://commits.webkit.org/212833@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246436 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-06-14 17:14:47 +00:00
return adoptRef(*new MediaStreamTrackPrivate(WTFMove(logger), WTFMove(source), WTFMove(id)));
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
}
Add more MediaStream logging https://bugs.webkit.org/show_bug.cgi?id=223143 <rdar://problem/75380363> Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopTrack): (WebCore::MediaStreamTrack::trackStarted): (WebCore::MediaStreamTrack::trackEnded): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::createAudioSourceProvider): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::end): * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource): (WebCore::AVVideoCaptureSource::startProducingData): (WebCore::AVVideoCaptureSource::stopProducingData): (WebCore::AVVideoCaptureSource::shutdownCaptureSession): (WebCore::AVVideoCaptureSource::orientationChanged): Canonical link: https://commits.webkit.org/235243@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@274376 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-03-13 02:01:11 +00:00
MediaStreamTrackPrivate::MediaStreamTrackPrivate(Ref<const Logger>&& trackLogger, Ref<RealtimeMediaSource>&& source, String&& id)
: m_source(WTFMove(source))
MediaStreamTrack should use more Ref<> and less RefPtr<> https://bugs.webkit.org/show_bug.cgi?id=164560 Patch by Youenn Fablet <youennf@gmail.com> on 2016-11-10 Reviewed by Eric Carlson. No change of behavior. Make MediaStreamTrack take a Ref<>& instead of a reference. Using Ref<>&& instead of RefPtr<>&& in MediaStreamTrackPrivate. Updating constness of some methods accordingly. * Modules/mediastream/MediaEndpointPeerConnection.cpp: (WebCore::MediaEndpointPeerConnection::createReceiver): * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::create): (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::clone): * Modules/mediastream/MediaStreamTrack.h: * Modules/webaudio/MediaStreamAudioSource.cpp: (WebCore::MediaStreamAudioSource::capabilities): (WebCore::MediaStreamAudioSource::settings): * Modules/webaudio/MediaStreamAudioSource.h: * platform/mediastream/MediaEndpoint.cpp: * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::clone): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::setMuted): (WebCore::MediaStreamTrackPrivate::source): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AVMediaCaptureSource.h: * platform/mediastream/mac/AVMediaCaptureSource.mm: (WebCore::AVMediaCaptureSource::initializeSettings): (WebCore::AVMediaCaptureSource::settings): (WebCore::AVMediaCaptureSource::initializeCapabilities): (WebCore::AVMediaCaptureSource::capabilities): * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h: (WebCore::RealtimeMediaSourceOwr::capabilities): (WebCore::RealtimeMediaSourceOwr::settings): * platform/mock/MockRealtimeMediaSource.cpp: (WebCore::MockRealtimeMediaSource::initializeCapabilities): (WebCore::MockRealtimeMediaSource::capabilities): (WebCore::MockRealtimeMediaSource::initializeSettings): (WebCore::MockRealtimeMediaSource::settings): * platform/mock/MockRealtimeMediaSource.h: Canonical link: https://commits.webkit.org/182267@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@208542 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-11-10 17:26:22 +00:00
, m_id(WTFMove(id))
Add more MediaStream logging https://bugs.webkit.org/show_bug.cgi?id=223143 <rdar://problem/75380363> Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopTrack): (WebCore::MediaStreamTrack::trackStarted): (WebCore::MediaStreamTrack::trackEnded): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::createAudioSourceProvider): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::end): * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource): (WebCore::AVVideoCaptureSource::startProducingData): (WebCore::AVVideoCaptureSource::stopProducingData): (WebCore::AVVideoCaptureSource::shutdownCaptureSession): (WebCore::AVVideoCaptureSource::orientationChanged): Canonical link: https://commits.webkit.org/235243@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@274376 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-03-13 02:01:11 +00:00
, m_logger(WTFMove(trackLogger))
Cloning a MediaStreamTrack does not clone the logger https://bugs.webkit.org/show_bug.cgi?id=198844 Reviewed by Eric Carlson. Source/WebCore: Make MediaStream and MediaStreamTrack rely on their private versions for logging. Move from a RefPtr version to a Ref so as to forbid nullptr crashes. Make sure that RealtimeIncomingAudioSource and RealtimeIncomingVideoSource check for their logger before logging. Covered by existing tests and updated test. * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp: (WebCore::loggerFromContext): (WebCore::CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack): * Modules/mediastream/MediaStream.cpp: (WebCore::loggerFromContext): (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::allow): * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: (WebCore::LibWebRTCMediaEndpoint::mediaStreamFromRTCStream): * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: (WebCore::LibWebRTCPeerConnectionBackend::createReceiverForSource): * Modules/webaudio/MediaStreamAudioDestinationNode.cpp: (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::setLogger): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::setLogger): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSourceCenter.cpp: (WebCore::RealtimeMediaSourceCenter::createMediaStream): * platform/mediastream/RealtimeMediaSourceCenter.h: * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp: (WebCore::RealtimeIncomingAudioSourceCocoa::OnData): * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm: (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferPool): (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferFromVideoFrame): (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame): LayoutTests: * fast/mediastream/MediaStreamTrack-clone-expected.txt: * fast/mediastream/MediaStreamTrack-clone.html: Canonical link: https://commits.webkit.org/212833@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246436 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-06-14 17:14:47 +00:00
#if !RELEASE_LOG_DISABLED
, m_logIdentifier(uniqueLogIdentifier())
#endif
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
{
ASSERT(isMainThread());
Add more MediaStream logging https://bugs.webkit.org/show_bug.cgi?id=223143 <rdar://problem/75380363> Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopTrack): (WebCore::MediaStreamTrack::trackStarted): (WebCore::MediaStreamTrack::trackEnded): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::createAudioSourceProvider): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::end): * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource): (WebCore::AVVideoCaptureSource::startProducingData): (WebCore::AVVideoCaptureSource::stopProducingData): (WebCore::AVVideoCaptureSource::shutdownCaptureSession): (WebCore::AVVideoCaptureSource::orientationChanged): Canonical link: https://commits.webkit.org/235243@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@274376 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-03-13 02:01:11 +00:00
UNUSED_PARAM(trackLogger);
ALWAYS_LOG(LOGIDENTIFIER);
Cloning a MediaStreamTrack does not clone the logger https://bugs.webkit.org/show_bug.cgi?id=198844 Reviewed by Eric Carlson. Source/WebCore: Make MediaStream and MediaStreamTrack rely on their private versions for logging. Move from a RefPtr version to a Ref so as to forbid nullptr crashes. Make sure that RealtimeIncomingAudioSource and RealtimeIncomingVideoSource check for their logger before logging. Covered by existing tests and updated test. * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp: (WebCore::loggerFromContext): (WebCore::CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack): * Modules/mediastream/MediaStream.cpp: (WebCore::loggerFromContext): (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::allow): * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: (WebCore::LibWebRTCMediaEndpoint::mediaStreamFromRTCStream): * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: (WebCore::LibWebRTCPeerConnectionBackend::createReceiverForSource): * Modules/webaudio/MediaStreamAudioDestinationNode.cpp: (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::setLogger): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::setLogger): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSourceCenter.cpp: (WebCore::RealtimeMediaSourceCenter::createMediaStream): * platform/mediastream/RealtimeMediaSourceCenter.h: * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp: (WebCore::RealtimeIncomingAudioSourceCocoa::OnData): * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm: (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferPool): (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferFromVideoFrame): (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame): LayoutTests: * fast/mediastream/MediaStreamTrack-clone-expected.txt: * fast/mediastream/MediaStreamTrack-clone.html: Canonical link: https://commits.webkit.org/212833@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246436 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-06-14 17:14:47 +00:00
#if !RELEASE_LOG_DISABLED
m_source->setLogger(m_logger.copyRef(), m_logIdentifier);
#endif
[MediaStream Mac] Stop using AVSampleBufferAudioRenderer https://bugs.webkit.org/show_bug.cgi?id=167821 Reviewed by Jer Noble. * WebCore.xcodeproj/project.pbxproj: Add new files. * platform/audio/mac/AudioSampleDataSource.cpp: (WebCore::AudioSampleDataSource::pullSamplesInternal): Don't assume the first timestamp from the render proc after a pause is zero. Stop using an audio renderer for each audio track. No audio renderers means we don't need to use an AVSampleBufferRenderSynchronizer. * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (-[WebAVSampleBufferStatusChangeListener invalidate]): No more audio renderers. (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC): Pause audio tracks explicitly. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::audioSourceProvider): Remove the existing code, it was incorrect and not thread safe. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::flushRenderers): No more audio renderers. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer): No more render synchronizer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayer): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): Start each audio track. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): Pause each audio track. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVolume): Pass the command to each audio track. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setMuted): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::streamTime): No more render synchronizer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated): Don't handle audio samples. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): Update for audio track class change. No more render synchronizer. (-[WebAVSampleBufferStatusChangeListener beginObservingRenderer:]): Deleted. (-[WebAVSampleBufferStatusChangeListener stopObservingRenderer:]): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueAudioSample): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::requestNotificationWhenReadyForAudioData): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::createAudioRenderer): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyAudioRenderer): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyAudioRenderers): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::rendererStatusDidChange): Deleted. * platform/mediastream/AudioTrackPrivateMediaStream.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): add/removeObserver takes a reference, not a pointer. (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Ditto. (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): Renamed from sourceHasMoreMediaData. (WebCore::MediaStreamTrackPrivate::sourceHasMoreMediaData): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addObserver): Take a reference, not a pointer. (WebCore::RealtimeMediaSource::removeObserver): Ditto. (WebCore::RealtimeMediaSource::videoSampleAvailable): Renamed from mediaDataUpdated. (WebCore::RealtimeMediaSource::audioSamplesAvailable): New. (WebCore::RealtimeMediaSource::stop): Drive-by cleanup. (WebCore::RealtimeMediaSource::requestStop): Ditto. (WebCore::RealtimeMediaSource::mediaDataUpdated): Deleted. * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AVAudioCaptureSource.h: * platform/mediastream/mac/AVAudioCaptureSource.mm: (WebCore::AVAudioCaptureSource::AVAudioCaptureSource): (WebCore::AVAudioCaptureSource::addObserver): (WebCore::AVAudioCaptureSource::shutdownCaptureSession): (WebCore::AVAudioCaptureSource::captureOutputDidOutputSampleBufferFromConnection): (WebCore::operator==): Deleted. (WebCore::operator!=): Deleted. * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::processNewFrame): Call videoSampleAvailable, not mediaDataUpdated. Render audio with a CoreAudio output unit. * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp: Added. (WebCore::AudioTrackPrivateMediaStreamCocoa::AudioTrackPrivateMediaStreamCocoa): (WebCore::AudioTrackPrivateMediaStreamCocoa::~AudioTrackPrivateMediaStreamCocoa): (WebCore::AudioTrackPrivateMediaStreamCocoa::playInternal): (WebCore::AudioTrackPrivateMediaStreamCocoa::play): (WebCore::AudioTrackPrivateMediaStreamCocoa::pause): (WebCore::AudioTrackPrivateMediaStreamCocoa::setVolume): (WebCore::AudioTrackPrivateMediaStreamCocoa::setupAudioUnit): (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable): (WebCore::AudioTrackPrivateMediaStreamCocoa::sourceStopped): (WebCore::AudioTrackPrivateMediaStreamCocoa::render): (WebCore::AudioTrackPrivateMediaStreamCocoa::inputProc): * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h: Added. * platform/mediastream/mac/MockRealtimeAudioSourceMac.h: * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm: (WebCore::alignTo16Bytes): (WebCore::MockRealtimeAudioSourceMac::emitSampleBuffers): (WebCore::MockRealtimeAudioSourceMac::reconfigure): Minor cleanup. (WebCore::MockRealtimeAudioSourceMac::render): Ditto. * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm: (WebCore::MockRealtimeVideoSourceMac::updateSampleBuffer): Call videoSampleAvailable, not mediaDataUpdated. * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: (WebCore::WebAudioSourceProviderAVFObjC::~WebAudioSourceProviderAVFObjC): (WebCore::WebAudioSourceProviderAVFObjC::provideInput): Use a mutex. Get rid of m_writeAheadCount, it is always 0. (WebCore::WebAudioSourceProviderAVFObjC::prepare): Use a lock. (WebCore::WebAudioSourceProviderAVFObjC::unprepare): Ditto. (WebCore::WebAudioSourceProviderAVFObjC::process): Ditto. * platform/mock/MockRealtimeAudioSource.h: (WebCore::MockRealtimeAudioSource::renderInterval): Decrease the render interval. Canonical link: https://commits.webkit.org/184904@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211728 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-06 17:22:27 +00:00
m_source->addObserver(*this);
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
}
[Mac MediaStream] implement AVFoundation backed MediaStreamSource https://bugs.webkit.org/show_bug.cgi?id=123316 Source/WebCore: Reviewed by Jer Noble No new tests, existing tests updated. * CMakeLists.txt: Add MediaStreamSourceStates.cpp. * Modules/mediastream/MediaSourceStates.cpp: (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates. (WebCore::MediaSourceStates::sourceType): Ditto. (WebCore::MediaSourceStates::facingMode): Ditto. * Modules/mediastream/MediaSourceStates.h: Ditto. * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addRemoteSource): (WebCore::MediaStream::removeRemoteSource): * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the private track do that. Change private track parameter to ref because it can't be NULL. (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto. (WebCore::MediaStreamTrack::setSource): Pass through to private track. (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::states): Ditto. (WebCore::MediaStreamTrack::capabilities): Ditto. (WebCore::MediaStreamTrack::applyConstraints): Ditto. (WebCore::MediaStreamTrack::stopProducingData): Ditto. (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't schedule an 'ended' event if called as a side effect of the stop() method having been called as per spec. (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged. (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged. (WebCore::MediaStreamTrack::stop): Pass through to private track. * Modules/mediastream/MediaStreamTrack.h: (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints. * WebCore.xcodeproj/project.pbxproj: Add new files. * bindings/js/JSMediaSourceStatesCustom.cpp: (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode is Unknown. * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and undefined method prototype. * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None. (WebCore::MediaStreamDescriptor::removeSource): Ditto. (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): * platform/mediastream/MediaStreamSource.cpp: (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes to Live, stopProducingData when it changes to Ended. (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers. (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled. (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have stopped, the spec says that track.stop() should permanently stop the track's source. * platform/mediastream/MediaStreamSource.h: (WebCore::MediaStreamSource::name): Make virtual so derived classes can override. (WebCore::MediaStreamSource::setName): Ditto. (WebCore::MediaStreamSource::readyState): Ditto. (WebCore::MediaStreamSource::enabled): Ditto. (WebCore::MediaStreamSource::muted): Ditto. (WebCore::MediaStreamSource::setReadonly): Ditto. (WebCore::MediaStreamSource::remote): Ditto. (WebCore::MediaStreamSource::setRemote): Ditto. (WebCore::MediaStreamSource::startProducingData): Added. (WebCore::MediaStreamSource::stopProducingData): Added. * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to its own file. * platform/mediastream/MediaStreamSourceStates.cpp: Added. (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the strings are available to platform code. (WebCore::MediaStreamSourceStates::sourceType): Ditto. * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr. (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables. (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer. (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer. (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client. (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source. (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged. (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source. (WebCore::MediaStreamTrackPrivate::states): Ditto. (WebCore::MediaStreamTrackPrivate::type): Ditto. (WebCore::MediaStreamTrackPrivate::capabilities): Ditto. (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto. (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes. (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query. (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/mac/AVAudioCaptureSource.h: Added. * platform/mediastream/mac/AVAudioCaptureSource.mm: Added. * platform/mediastream/mac/AVCaptureDeviceManager.h: Added. * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added. * platform/mediastream/mac/AVMediaCaptureSource.h: Added. * platform/mediastream/mac/AVMediaCaptureSource.mm: Added. * platform/mediastream/mac/AVVideoCaptureSource.h: Added. * platform/mediastream/mac/AVVideoCaptureSource.mm: Added. * platform/mediastream/mac/MediaStreamCenterMac.cpp: (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement. (WebCore::MediaStreamCenterMac::createMediaStream): Ditto. (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto. * platform/mock/MockMediaStreamCenter.cpp: (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes. (WebCore::MockMediaStreamCenter::createMediaStream): LayoutTests: Reviewed by Jer Noble. * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: Updated. * fast/mediastream/MediaStream-add-remove-tracks.html: Ditto. * fast/mediastream/MediaStreamConstructor-expected.txt: Ditto. * fast/mediastream/MediaStreamConstructor.html: Ditto. * fast/mediastream/MediaStreamTrack-getSources.html: Remove typo. * fast/mediastream/MediaStreamTrack-expected.txt: Updated results. * fast/mediastream/MediaStreamTrack.html: Update to test track.stop() behavior. Canonical link: https://commits.webkit.org/141590@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158220 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-29 20:48:21 +00:00
MediaStreamTrackPrivate::~MediaStreamTrackPrivate()
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
{
ASSERT(isMainThread());
Add more MediaStream logging https://bugs.webkit.org/show_bug.cgi?id=223143 <rdar://problem/75380363> Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopTrack): (WebCore::MediaStreamTrack::trackStarted): (WebCore::MediaStreamTrack::trackEnded): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::createAudioSourceProvider): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::end): * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource): (WebCore::AVVideoCaptureSource::startProducingData): (WebCore::AVVideoCaptureSource::stopProducingData): (WebCore::AVVideoCaptureSource::shutdownCaptureSession): (WebCore::AVVideoCaptureSource::orientationChanged): Canonical link: https://commits.webkit.org/235243@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@274376 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-03-13 02:01:11 +00:00
ALWAYS_LOG(LOGIDENTIFIER);
[MediaStream Mac] Stop using AVSampleBufferAudioRenderer https://bugs.webkit.org/show_bug.cgi?id=167821 Reviewed by Jer Noble. * WebCore.xcodeproj/project.pbxproj: Add new files. * platform/audio/mac/AudioSampleDataSource.cpp: (WebCore::AudioSampleDataSource::pullSamplesInternal): Don't assume the first timestamp from the render proc after a pause is zero. Stop using an audio renderer for each audio track. No audio renderers means we don't need to use an AVSampleBufferRenderSynchronizer. * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (-[WebAVSampleBufferStatusChangeListener invalidate]): No more audio renderers. (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC): Pause audio tracks explicitly. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::audioSourceProvider): Remove the existing code, it was incorrect and not thread safe. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::flushRenderers): No more audio renderers. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer): No more render synchronizer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayer): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): Start each audio track. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): Pause each audio track. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVolume): Pass the command to each audio track. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setMuted): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::streamTime): No more render synchronizer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated): Don't handle audio samples. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): Update for audio track class change. No more render synchronizer. (-[WebAVSampleBufferStatusChangeListener beginObservingRenderer:]): Deleted. (-[WebAVSampleBufferStatusChangeListener stopObservingRenderer:]): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueAudioSample): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::requestNotificationWhenReadyForAudioData): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::createAudioRenderer): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyAudioRenderer): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyAudioRenderers): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::rendererStatusDidChange): Deleted. * platform/mediastream/AudioTrackPrivateMediaStream.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): add/removeObserver takes a reference, not a pointer. (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Ditto. (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): Renamed from sourceHasMoreMediaData. (WebCore::MediaStreamTrackPrivate::sourceHasMoreMediaData): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addObserver): Take a reference, not a pointer. (WebCore::RealtimeMediaSource::removeObserver): Ditto. (WebCore::RealtimeMediaSource::videoSampleAvailable): Renamed from mediaDataUpdated. (WebCore::RealtimeMediaSource::audioSamplesAvailable): New. (WebCore::RealtimeMediaSource::stop): Drive-by cleanup. (WebCore::RealtimeMediaSource::requestStop): Ditto. (WebCore::RealtimeMediaSource::mediaDataUpdated): Deleted. * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AVAudioCaptureSource.h: * platform/mediastream/mac/AVAudioCaptureSource.mm: (WebCore::AVAudioCaptureSource::AVAudioCaptureSource): (WebCore::AVAudioCaptureSource::addObserver): (WebCore::AVAudioCaptureSource::shutdownCaptureSession): (WebCore::AVAudioCaptureSource::captureOutputDidOutputSampleBufferFromConnection): (WebCore::operator==): Deleted. (WebCore::operator!=): Deleted. * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::processNewFrame): Call videoSampleAvailable, not mediaDataUpdated. Render audio with a CoreAudio output unit. * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp: Added. (WebCore::AudioTrackPrivateMediaStreamCocoa::AudioTrackPrivateMediaStreamCocoa): (WebCore::AudioTrackPrivateMediaStreamCocoa::~AudioTrackPrivateMediaStreamCocoa): (WebCore::AudioTrackPrivateMediaStreamCocoa::playInternal): (WebCore::AudioTrackPrivateMediaStreamCocoa::play): (WebCore::AudioTrackPrivateMediaStreamCocoa::pause): (WebCore::AudioTrackPrivateMediaStreamCocoa::setVolume): (WebCore::AudioTrackPrivateMediaStreamCocoa::setupAudioUnit): (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable): (WebCore::AudioTrackPrivateMediaStreamCocoa::sourceStopped): (WebCore::AudioTrackPrivateMediaStreamCocoa::render): (WebCore::AudioTrackPrivateMediaStreamCocoa::inputProc): * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h: Added. * platform/mediastream/mac/MockRealtimeAudioSourceMac.h: * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm: (WebCore::alignTo16Bytes): (WebCore::MockRealtimeAudioSourceMac::emitSampleBuffers): (WebCore::MockRealtimeAudioSourceMac::reconfigure): Minor cleanup. (WebCore::MockRealtimeAudioSourceMac::render): Ditto. * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm: (WebCore::MockRealtimeVideoSourceMac::updateSampleBuffer): Call videoSampleAvailable, not mediaDataUpdated. * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: (WebCore::WebAudioSourceProviderAVFObjC::~WebAudioSourceProviderAVFObjC): (WebCore::WebAudioSourceProviderAVFObjC::provideInput): Use a mutex. Get rid of m_writeAheadCount, it is always 0. (WebCore::WebAudioSourceProviderAVFObjC::prepare): Use a lock. (WebCore::WebAudioSourceProviderAVFObjC::unprepare): Ditto. (WebCore::WebAudioSourceProviderAVFObjC::process): Ditto. * platform/mock/MockRealtimeAudioSource.h: (WebCore::MockRealtimeAudioSource::renderInterval): Decrease the render interval. Canonical link: https://commits.webkit.org/184904@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211728 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-06 17:22:27 +00:00
m_source->removeObserver(*this);
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
}
Make use of WeakHashSet for MediaStreamTrackPrivate and RealtimeMediaSource observers https://bugs.webkit.org/show_bug.cgi?id=210492 Reviewed by Geoffrey Garen. Source/WebCore: We are making use of WeakHashSet to improve the robustness of the code. For that purpose we use the new WeakHashSet::forEach method. No change of behavior. * Modules/mediarecorder/MediaRecorder.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::forEachObserver const): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::forEachObserver): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::forEachObserver const): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::hasObserver const): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addAudioSampleObserver): (WebCore::RealtimeMediaSource::removeAudioSampleObserver): (WebCore::RealtimeMediaSource::addObserver): (WebCore::RealtimeMediaSource::removeObserver): (WebCore::RealtimeMediaSource::forEachObserver): (WebCore::RealtimeMediaSource::notifyMutedObservers): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::forEachObserver const): Deleted. (WebCore::RealtimeMediaSource::notifyMutedObservers const): Deleted. * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/RealtimeOutgoingVideoSource.h: Source/WTF: * wtf/WeakHashSet.h: Canonical link: https://commits.webkit.org/223514@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@260241 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-04-17 08:40:52 +00:00
void MediaStreamTrackPrivate::forEachObserver(const Function<void(Observer&)>& apply)
Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable() https://bugs.webkit.org/show_bug.cgi?id=188097 <rdar://problem/42558823> Reviewed by Eric Carlson. Source/WebCore: Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable(). RealtimeMediaSource::audioSamplesAvailable() is called on a background thread but iterates over observers that may get destroyed concurrently on the main thread. To address the issue: - Introduce a Lock to protect m_observer accesses - Copy observers to a Vector before iterating over them * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::forEachObserver const): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::sampleBufferUpdated): (WebCore::MediaStreamTrackPrivate::Observer::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addObserver): (WebCore::RealtimeMediaSource::removeObserver): (WebCore::RealtimeMediaSource::forEachObserver const): (WebCore::RealtimeMediaSource::notifyMutedObservers const): (WebCore::RealtimeMediaSource::settingsDidChange): (WebCore::RealtimeMediaSource::videoSampleAvailable): (WebCore::RealtimeMediaSource::audioSamplesAvailable): (WebCore::RealtimeMediaSource::start): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::captureFailed): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp: (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable): * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: Source/WebKit: * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: Canonical link: https://commits.webkit.org/203253@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234334 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-07-27 22:33:52 +00:00
{
Introduce a RealtimeMediaSource observer dedicated to receiving audio samples https://bugs.webkit.org/show_bug.cgi?id=210180 Reviewed by Eric Carlson. Source/WebCore: RealtimeMediaSource::Observer was called on various threads which was making iterating through them difficult. Observers were copied to a vector for iterating each time and locking was happening for each indivudual observer. Instead of doing that, RealtimeMediaSource::Observer no longer gives access to audio samples, all its methods are called from the main thread. AudioSampleObserver is introduced with a single method to receive audio samples. RealtimeMediaSource keeps a set of AudioSampleObserver separated from its existing Observer hashset. These observers can only be added/removed from the main thread while audio sample delivery usually happens from a background thread. We no longer need to copy the audio sample observers in a vector and lock only once when iterating the audio sample observers. This change requires to update MediaStreamTrackPrivate and RealtimeMediaSource observers. This includes WebAudio, Audio Renderer and Media Recorder. Each corresponding class is now registering itself as a MediaStreamTrackPrivate::Observer and when needed as a RealtimeMediaSource::Observer. This allows removing the additional copy-in-vector/lock that was happening when iterating over MediaStreamTrackPrivate::Observers for audio samples. This change also allows for a consumer to always observe the MediaStreamTrackPrivate but receive audio samples only when needed. We change the AudioTrackPrivateMediaStream implementation so that, if the renderer is muted, not playing, the track is muted or not enabled, it no longer receives audio samples. This is especially useful in the typical case where a video element displays the locally captured stream (including a local audio track) but is muted to prevent feedback loop. For that reason, the player is now setting the muted state of the renderer instead of setting volume to 0. Covered by existing test sets. * Modules/mediarecorder/MediaRecorder.cpp: (WebCore::MediaRecorder::createMediaRecorderPrivate): * Modules/mediarecorder/MediaRecorder.h: * Modules/mediarecorder/MediaRecorderProvider.cpp: (WebCore::MediaRecorderProvider::createMediaRecorderPrivate): * Modules/mediarecorder/MediaRecorderProvider.h: * loader/EmptyClients.cpp: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVolume): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setMuted): * platform/mediarecorder/MediaRecorderPrivate.cpp: (WebCore::MediaRecorderPrivate::selectTracks): * platform/mediarecorder/MediaRecorderPrivate.h: (WebCore::MediaRecorderPrivate::setAudioSource): (WebCore::MediaRecorderPrivate::~MediaRecorderPrivate): * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp: (WebCore::MediaRecorderPrivateAVFImpl::create): (WebCore::MediaRecorderPrivateAVFImpl::~MediaRecorderPrivateAVFImpl): (WebCore::MediaRecorderPrivateAVFImpl::audioSamplesAvailable): (WebCore::MediaRecorderPrivateAVFImpl::stopRecording): (WebCore::MediaRecorderPrivateAVFImpl::fetchData): * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h: * platform/mediarecorder/MediaRecorderPrivateMock.cpp: (WebCore::MediaRecorderPrivateMock::MediaRecorderPrivateMock): (WebCore::MediaRecorderPrivateMock::~MediaRecorderPrivateMock): (WebCore::MediaRecorderPrivateMock::stopRecording): (WebCore::MediaRecorderPrivateMock::sampleBufferUpdated): (WebCore::MediaRecorderPrivateMock::audioSamplesAvailable): (WebCore::MediaRecorderPrivateMock::generateMockCounterString): (WebCore::MediaRecorderPrivateMock::fetchData): * platform/mediarecorder/MediaRecorderPrivateMock.h: * platform/mediastream/AudioTrackPrivateMediaStream.cpp: (WebCore::AudioTrackPrivateMediaStream::AudioTrackPrivateMediaStream): (WebCore::AudioTrackPrivateMediaStream::clear): (WebCore::AudioTrackPrivateMediaStream::play): (WebCore::AudioTrackPrivateMediaStream::pause): (WebCore::AudioTrackPrivateMediaStream::setMuted): (WebCore::AudioTrackPrivateMediaStream::audioSamplesAvailable): (WebCore::AudioTrackPrivateMediaStream::trackMutedChanged): (WebCore::AudioTrackPrivateMediaStream::trackEnabledChanged): (WebCore::AudioTrackPrivateMediaStream::trackEnded): (WebCore::AudioTrackPrivateMediaStream::updateRenderer): (WebCore::AudioTrackPrivateMediaStream::startRenderer): (WebCore::AudioTrackPrivateMediaStream::stopRenderer): * platform/mediastream/AudioTrackPrivateMediaStream.h: * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp: (WebCore::webkitMediaStreamSrcFinalize): (WebCore::webkitMediaStreamSrcChangeState): (WebCore::webkitMediaStreamSrcSetupSrc): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::forEachTrack): * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::forEachObserver const): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::hasStartedProducingAudioData): * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addAudioSampleObserver): (WebCore::RealtimeMediaSource::removeAudioSampleObserver): (WebCore::RealtimeMediaSource::addObserver): (WebCore::RealtimeMediaSource::removeObserver): (WebCore::RealtimeMediaSource::forEachObserver const): (WebCore::RealtimeMediaSource::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/RealtimeOutgoingAudioSource.cpp: (WebCore::RealtimeOutgoingAudioSource::~RealtimeOutgoingAudioSource): (WebCore::RealtimeOutgoingAudioSource::observeSource): (WebCore::RealtimeOutgoingAudioSource::unobserveSource): * platform/mediastream/RealtimeOutgoingAudioSource.h: * platform/mediastream/WebAudioSourceProvider.h: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: (WebCore::WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC): (WebCore::WebAudioSourceProviderAVFObjC::~WebAudioSourceProviderAVFObjC): (WebCore::WebAudioSourceProviderAVFObjC::trackEnabledChanged): (WebCore::WebAudioSourceProviderAVFObjC::audioSamplesAvailable): * testing/Internals.cpp: (WebCore::Internals::~Internals): (WebCore::createRecorderMockSource): (WebCore::Internals::observeMediaStreamTrack): (WebCore::Internals::videoSampleAvailable): * testing/Internals.h: Source/WebKit: Update SourceProxy to be an AudioSampleObserver. Update MediaRecorder to only listen for audio samples if GPU remote writer is successfully created. It also stops listening to audio samples as soon as stopping the recording. * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::SourceProxy::SourceProxy): (WebKit::UserMediaCaptureManagerProxy::SourceProxy::~SourceProxy): * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp: (WebKit::MediaRecorderPrivate::MediaRecorderPrivate): (WebKit::MediaRecorderPrivate::~MediaRecorderPrivate): (WebKit::MediaRecorderPrivate::audioSamplesAvailable): (WebKit::MediaRecorderPrivate::stopRecording): * WebProcess/GPU/webrtc/MediaRecorderPrivate.h: * WebProcess/GPU/webrtc/MediaRecorderProvider.cpp: (WebKit::MediaRecorderProvider::createMediaRecorderPrivate): * WebProcess/GPU/webrtc/MediaRecorderProvider.h: Canonical link: https://commits.webkit.org/223217@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@259861 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-04-10 10:58:42 +00:00
ASSERT(isMainThread());
ASSERT(!m_observers.hasNullReferences());
auto protectedThis = makeRef(*this);
Make use of WeakHashSet for MediaStreamTrackPrivate and RealtimeMediaSource observers https://bugs.webkit.org/show_bug.cgi?id=210492 Reviewed by Geoffrey Garen. Source/WebCore: We are making use of WeakHashSet to improve the robustness of the code. For that purpose we use the new WeakHashSet::forEach method. No change of behavior. * Modules/mediarecorder/MediaRecorder.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::forEachObserver const): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::forEachObserver): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::forEachObserver const): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::hasObserver const): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addAudioSampleObserver): (WebCore::RealtimeMediaSource::removeAudioSampleObserver): (WebCore::RealtimeMediaSource::addObserver): (WebCore::RealtimeMediaSource::removeObserver): (WebCore::RealtimeMediaSource::forEachObserver): (WebCore::RealtimeMediaSource::notifyMutedObservers): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::forEachObserver const): Deleted. (WebCore::RealtimeMediaSource::notifyMutedObservers const): Deleted. * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/RealtimeOutgoingVideoSource.h: Source/WTF: * wtf/WeakHashSet.h: Canonical link: https://commits.webkit.org/223514@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@260241 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-04-17 08:40:52 +00:00
m_observers.forEach(apply);
Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable() https://bugs.webkit.org/show_bug.cgi?id=188097 <rdar://problem/42558823> Reviewed by Eric Carlson. Source/WebCore: Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable(). RealtimeMediaSource::audioSamplesAvailable() is called on a background thread but iterates over observers that may get destroyed concurrently on the main thread. To address the issue: - Introduce a Lock to protect m_observer accesses - Copy observers to a Vector before iterating over them * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::forEachObserver const): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::sampleBufferUpdated): (WebCore::MediaStreamTrackPrivate::Observer::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addObserver): (WebCore::RealtimeMediaSource::removeObserver): (WebCore::RealtimeMediaSource::forEachObserver const): (WebCore::RealtimeMediaSource::notifyMutedObservers const): (WebCore::RealtimeMediaSource::settingsDidChange): (WebCore::RealtimeMediaSource::videoSampleAvailable): (WebCore::RealtimeMediaSource::audioSamplesAvailable): (WebCore::RealtimeMediaSource::start): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::captureFailed): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp: (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable): * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: Source/WebKit: * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: Canonical link: https://commits.webkit.org/203253@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234334 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-07-27 22:33:52 +00:00
}
[MediaStream] Clean up MediaStream private interfaces https://bugs.webkit.org/show_bug.cgi?id=149381 Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrack): (WebCore::MediaStream::didRemoveTrack): (WebCore::MediaStream::registry): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::didAddTrackToPrivate): Deleted. (WebCore::MediaStream::didRemoveTrackFromPrivate): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamRegistry.cpp: (WebCore::MediaStreamRegistry::lookup): (WebCore::MediaStreamRegistry::MediaStreamRegistry): * Modules/mediastream/MediaStreamRegistry.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::removeObserver): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::trackStatesChanged): (WebCore::MediaStreamTrack::configureTrackRendering): * Modules/mediastream/MediaStreamTrack.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::supportsType): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::load): * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.h: * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.mm: (WebCore::MediaStreamPrivateAVFObjC::create): (WebCore::MediaStreamPrivateAVFObjC::MediaStreamPrivateAVFObjC): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::~MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivateClient::~MediaStreamPrivateClient): (WebCore::MediaStreamPrivate::id): (WebCore::MediaStreamPrivate::active): (WebCore::MediaStreamPrivate::MediaStreamPrivate): Deleted. (WebCore::MediaStreamPrivate::~MediaStreamPrivate): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceStatesChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::~Observer): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::startProducingData): (WebCore::MediaStreamTrackPrivate::stopProducingData): (WebCore::MediaStreamTrackPrivate::setMuted): (WebCore::MediaStreamTrackPrivateClient::~MediaStreamTrackPrivateClient): Deleted. (WebCore::MediaStreamTrackPrivate::setClient): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/MediaStreamTrackSourcesRequestClient.h: (WebCore::TrackSourceInfo::create): (WebCore::TrackSourceInfo::id): (WebCore::TrackSourceInfo::label): (WebCore::TrackSourceInfo::groupId): (WebCore::TrackSourceInfo::kind): (WebCore::TrackSourceInfo::TrackSourceInfo): (WebCore::TrackSourceInfo::deviceId): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::statesDidChanged): (WebCore::RealtimeMediaSource::readonly): * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::id): (WebCore::RealtimeMediaSource::persistentId): (WebCore::RealtimeMediaSource::setPersistentId): (WebCore::RealtimeMediaSource::type): (WebCore::RealtimeMediaSource::stopped): * platform/mediastream/RealtimeMediaSourceCenter.h: * platform/mediastream/mac/AVCaptureDeviceManager.mm: (WebCore::AVCaptureDeviceManager::getSourcesInfo): * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp: (WebCore::RealtimeMediaSourceCenterMac::~RealtimeMediaSourceCenterMac): (WebCore::RealtimeMediaSourceCenterMac::validateRequestConstraints): (WebCore::RealtimeMediaSourceCenterMac::createMediaStream): (WebCore::RealtimeMediaSourceCenterMac::getMediaStreamTrackSources): * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h: * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::~RealtimeMediaSourceCenterOwr): (WebCore::RealtimeMediaSourceCenterOwr::validateRequestConstraints): * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h: * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::registerMockRealtimeMediaSourceCenter): (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints): (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): (WebCore::MockRealtimeMediaSourceCenter::getMediaStreamTrackSources): * platform/mock/MockRealtimeMediaSourceCenter.h: Canonical link: https://commits.webkit.org/167504@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190072 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-09-21 20:09:51 +00:00
void MediaStreamTrackPrivate::addObserver(MediaStreamTrackPrivate::Observer& observer)
{
Introduce a RealtimeMediaSource observer dedicated to receiving audio samples https://bugs.webkit.org/show_bug.cgi?id=210180 Reviewed by Eric Carlson. Source/WebCore: RealtimeMediaSource::Observer was called on various threads which was making iterating through them difficult. Observers were copied to a vector for iterating each time and locking was happening for each indivudual observer. Instead of doing that, RealtimeMediaSource::Observer no longer gives access to audio samples, all its methods are called from the main thread. AudioSampleObserver is introduced with a single method to receive audio samples. RealtimeMediaSource keeps a set of AudioSampleObserver separated from its existing Observer hashset. These observers can only be added/removed from the main thread while audio sample delivery usually happens from a background thread. We no longer need to copy the audio sample observers in a vector and lock only once when iterating the audio sample observers. This change requires to update MediaStreamTrackPrivate and RealtimeMediaSource observers. This includes WebAudio, Audio Renderer and Media Recorder. Each corresponding class is now registering itself as a MediaStreamTrackPrivate::Observer and when needed as a RealtimeMediaSource::Observer. This allows removing the additional copy-in-vector/lock that was happening when iterating over MediaStreamTrackPrivate::Observers for audio samples. This change also allows for a consumer to always observe the MediaStreamTrackPrivate but receive audio samples only when needed. We change the AudioTrackPrivateMediaStream implementation so that, if the renderer is muted, not playing, the track is muted or not enabled, it no longer receives audio samples. This is especially useful in the typical case where a video element displays the locally captured stream (including a local audio track) but is muted to prevent feedback loop. For that reason, the player is now setting the muted state of the renderer instead of setting volume to 0. Covered by existing test sets. * Modules/mediarecorder/MediaRecorder.cpp: (WebCore::MediaRecorder::createMediaRecorderPrivate): * Modules/mediarecorder/MediaRecorder.h: * Modules/mediarecorder/MediaRecorderProvider.cpp: (WebCore::MediaRecorderProvider::createMediaRecorderPrivate): * Modules/mediarecorder/MediaRecorderProvider.h: * loader/EmptyClients.cpp: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVolume): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setMuted): * platform/mediarecorder/MediaRecorderPrivate.cpp: (WebCore::MediaRecorderPrivate::selectTracks): * platform/mediarecorder/MediaRecorderPrivate.h: (WebCore::MediaRecorderPrivate::setAudioSource): (WebCore::MediaRecorderPrivate::~MediaRecorderPrivate): * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp: (WebCore::MediaRecorderPrivateAVFImpl::create): (WebCore::MediaRecorderPrivateAVFImpl::~MediaRecorderPrivateAVFImpl): (WebCore::MediaRecorderPrivateAVFImpl::audioSamplesAvailable): (WebCore::MediaRecorderPrivateAVFImpl::stopRecording): (WebCore::MediaRecorderPrivateAVFImpl::fetchData): * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h: * platform/mediarecorder/MediaRecorderPrivateMock.cpp: (WebCore::MediaRecorderPrivateMock::MediaRecorderPrivateMock): (WebCore::MediaRecorderPrivateMock::~MediaRecorderPrivateMock): (WebCore::MediaRecorderPrivateMock::stopRecording): (WebCore::MediaRecorderPrivateMock::sampleBufferUpdated): (WebCore::MediaRecorderPrivateMock::audioSamplesAvailable): (WebCore::MediaRecorderPrivateMock::generateMockCounterString): (WebCore::MediaRecorderPrivateMock::fetchData): * platform/mediarecorder/MediaRecorderPrivateMock.h: * platform/mediastream/AudioTrackPrivateMediaStream.cpp: (WebCore::AudioTrackPrivateMediaStream::AudioTrackPrivateMediaStream): (WebCore::AudioTrackPrivateMediaStream::clear): (WebCore::AudioTrackPrivateMediaStream::play): (WebCore::AudioTrackPrivateMediaStream::pause): (WebCore::AudioTrackPrivateMediaStream::setMuted): (WebCore::AudioTrackPrivateMediaStream::audioSamplesAvailable): (WebCore::AudioTrackPrivateMediaStream::trackMutedChanged): (WebCore::AudioTrackPrivateMediaStream::trackEnabledChanged): (WebCore::AudioTrackPrivateMediaStream::trackEnded): (WebCore::AudioTrackPrivateMediaStream::updateRenderer): (WebCore::AudioTrackPrivateMediaStream::startRenderer): (WebCore::AudioTrackPrivateMediaStream::stopRenderer): * platform/mediastream/AudioTrackPrivateMediaStream.h: * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp: (WebCore::webkitMediaStreamSrcFinalize): (WebCore::webkitMediaStreamSrcChangeState): (WebCore::webkitMediaStreamSrcSetupSrc): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::forEachTrack): * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::forEachObserver const): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::hasStartedProducingAudioData): * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addAudioSampleObserver): (WebCore::RealtimeMediaSource::removeAudioSampleObserver): (WebCore::RealtimeMediaSource::addObserver): (WebCore::RealtimeMediaSource::removeObserver): (WebCore::RealtimeMediaSource::forEachObserver const): (WebCore::RealtimeMediaSource::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/RealtimeOutgoingAudioSource.cpp: (WebCore::RealtimeOutgoingAudioSource::~RealtimeOutgoingAudioSource): (WebCore::RealtimeOutgoingAudioSource::observeSource): (WebCore::RealtimeOutgoingAudioSource::unobserveSource): * platform/mediastream/RealtimeOutgoingAudioSource.h: * platform/mediastream/WebAudioSourceProvider.h: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: (WebCore::WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC): (WebCore::WebAudioSourceProviderAVFObjC::~WebAudioSourceProviderAVFObjC): (WebCore::WebAudioSourceProviderAVFObjC::trackEnabledChanged): (WebCore::WebAudioSourceProviderAVFObjC::audioSamplesAvailable): * testing/Internals.cpp: (WebCore::Internals::~Internals): (WebCore::createRecorderMockSource): (WebCore::Internals::observeMediaStreamTrack): (WebCore::Internals::videoSampleAvailable): * testing/Internals.h: Source/WebKit: Update SourceProxy to be an AudioSampleObserver. Update MediaRecorder to only listen for audio samples if GPU remote writer is successfully created. It also stops listening to audio samples as soon as stopping the recording. * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::SourceProxy::SourceProxy): (WebKit::UserMediaCaptureManagerProxy::SourceProxy::~SourceProxy): * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp: (WebKit::MediaRecorderPrivate::MediaRecorderPrivate): (WebKit::MediaRecorderPrivate::~MediaRecorderPrivate): (WebKit::MediaRecorderPrivate::audioSamplesAvailable): (WebKit::MediaRecorderPrivate::stopRecording): * WebProcess/GPU/webrtc/MediaRecorderPrivate.h: * WebProcess/GPU/webrtc/MediaRecorderProvider.cpp: (WebKit::MediaRecorderProvider::createMediaRecorderPrivate): * WebProcess/GPU/webrtc/MediaRecorderProvider.h: Canonical link: https://commits.webkit.org/223217@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@259861 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-04-10 10:58:42 +00:00
ASSERT(isMainThread());
Make use of WeakHashSet for MediaStreamTrackPrivate and RealtimeMediaSource observers https://bugs.webkit.org/show_bug.cgi?id=210492 Reviewed by Geoffrey Garen. Source/WebCore: We are making use of WeakHashSet to improve the robustness of the code. For that purpose we use the new WeakHashSet::forEach method. No change of behavior. * Modules/mediarecorder/MediaRecorder.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::forEachObserver const): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::forEachObserver): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::forEachObserver const): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::hasObserver const): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addAudioSampleObserver): (WebCore::RealtimeMediaSource::removeAudioSampleObserver): (WebCore::RealtimeMediaSource::addObserver): (WebCore::RealtimeMediaSource::removeObserver): (WebCore::RealtimeMediaSource::forEachObserver): (WebCore::RealtimeMediaSource::notifyMutedObservers): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::forEachObserver const): Deleted. (WebCore::RealtimeMediaSource::notifyMutedObservers const): Deleted. * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/RealtimeOutgoingVideoSource.h: Source/WTF: * wtf/WeakHashSet.h: Canonical link: https://commits.webkit.org/223514@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@260241 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-04-17 08:40:52 +00:00
m_observers.add(observer);
[MediaStream] Clean up MediaStream private interfaces https://bugs.webkit.org/show_bug.cgi?id=149381 Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrack): (WebCore::MediaStream::didRemoveTrack): (WebCore::MediaStream::registry): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::didAddTrackToPrivate): Deleted. (WebCore::MediaStream::didRemoveTrackFromPrivate): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamRegistry.cpp: (WebCore::MediaStreamRegistry::lookup): (WebCore::MediaStreamRegistry::MediaStreamRegistry): * Modules/mediastream/MediaStreamRegistry.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::removeObserver): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::trackStatesChanged): (WebCore::MediaStreamTrack::configureTrackRendering): * Modules/mediastream/MediaStreamTrack.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::supportsType): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::load): * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.h: * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.mm: (WebCore::MediaStreamPrivateAVFObjC::create): (WebCore::MediaStreamPrivateAVFObjC::MediaStreamPrivateAVFObjC): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::~MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivateClient::~MediaStreamPrivateClient): (WebCore::MediaStreamPrivate::id): (WebCore::MediaStreamPrivate::active): (WebCore::MediaStreamPrivate::MediaStreamPrivate): Deleted. (WebCore::MediaStreamPrivate::~MediaStreamPrivate): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceStatesChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::~Observer): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::startProducingData): (WebCore::MediaStreamTrackPrivate::stopProducingData): (WebCore::MediaStreamTrackPrivate::setMuted): (WebCore::MediaStreamTrackPrivateClient::~MediaStreamTrackPrivateClient): Deleted. (WebCore::MediaStreamTrackPrivate::setClient): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/MediaStreamTrackSourcesRequestClient.h: (WebCore::TrackSourceInfo::create): (WebCore::TrackSourceInfo::id): (WebCore::TrackSourceInfo::label): (WebCore::TrackSourceInfo::groupId): (WebCore::TrackSourceInfo::kind): (WebCore::TrackSourceInfo::TrackSourceInfo): (WebCore::TrackSourceInfo::deviceId): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::statesDidChanged): (WebCore::RealtimeMediaSource::readonly): * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::id): (WebCore::RealtimeMediaSource::persistentId): (WebCore::RealtimeMediaSource::setPersistentId): (WebCore::RealtimeMediaSource::type): (WebCore::RealtimeMediaSource::stopped): * platform/mediastream/RealtimeMediaSourceCenter.h: * platform/mediastream/mac/AVCaptureDeviceManager.mm: (WebCore::AVCaptureDeviceManager::getSourcesInfo): * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp: (WebCore::RealtimeMediaSourceCenterMac::~RealtimeMediaSourceCenterMac): (WebCore::RealtimeMediaSourceCenterMac::validateRequestConstraints): (WebCore::RealtimeMediaSourceCenterMac::createMediaStream): (WebCore::RealtimeMediaSourceCenterMac::getMediaStreamTrackSources): * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h: * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::~RealtimeMediaSourceCenterOwr): (WebCore::RealtimeMediaSourceCenterOwr::validateRequestConstraints): * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h: * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::registerMockRealtimeMediaSourceCenter): (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints): (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): (WebCore::MockRealtimeMediaSourceCenter::getMediaStreamTrackSources): * platform/mock/MockRealtimeMediaSourceCenter.h: Canonical link: https://commits.webkit.org/167504@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190072 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-09-21 20:09:51 +00:00
}
void MediaStreamTrackPrivate::removeObserver(MediaStreamTrackPrivate::Observer& observer)
{
Introduce a RealtimeMediaSource observer dedicated to receiving audio samples https://bugs.webkit.org/show_bug.cgi?id=210180 Reviewed by Eric Carlson. Source/WebCore: RealtimeMediaSource::Observer was called on various threads which was making iterating through them difficult. Observers were copied to a vector for iterating each time and locking was happening for each indivudual observer. Instead of doing that, RealtimeMediaSource::Observer no longer gives access to audio samples, all its methods are called from the main thread. AudioSampleObserver is introduced with a single method to receive audio samples. RealtimeMediaSource keeps a set of AudioSampleObserver separated from its existing Observer hashset. These observers can only be added/removed from the main thread while audio sample delivery usually happens from a background thread. We no longer need to copy the audio sample observers in a vector and lock only once when iterating the audio sample observers. This change requires to update MediaStreamTrackPrivate and RealtimeMediaSource observers. This includes WebAudio, Audio Renderer and Media Recorder. Each corresponding class is now registering itself as a MediaStreamTrackPrivate::Observer and when needed as a RealtimeMediaSource::Observer. This allows removing the additional copy-in-vector/lock that was happening when iterating over MediaStreamTrackPrivate::Observers for audio samples. This change also allows for a consumer to always observe the MediaStreamTrackPrivate but receive audio samples only when needed. We change the AudioTrackPrivateMediaStream implementation so that, if the renderer is muted, not playing, the track is muted or not enabled, it no longer receives audio samples. This is especially useful in the typical case where a video element displays the locally captured stream (including a local audio track) but is muted to prevent feedback loop. For that reason, the player is now setting the muted state of the renderer instead of setting volume to 0. Covered by existing test sets. * Modules/mediarecorder/MediaRecorder.cpp: (WebCore::MediaRecorder::createMediaRecorderPrivate): * Modules/mediarecorder/MediaRecorder.h: * Modules/mediarecorder/MediaRecorderProvider.cpp: (WebCore::MediaRecorderProvider::createMediaRecorderPrivate): * Modules/mediarecorder/MediaRecorderProvider.h: * loader/EmptyClients.cpp: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVolume): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setMuted): * platform/mediarecorder/MediaRecorderPrivate.cpp: (WebCore::MediaRecorderPrivate::selectTracks): * platform/mediarecorder/MediaRecorderPrivate.h: (WebCore::MediaRecorderPrivate::setAudioSource): (WebCore::MediaRecorderPrivate::~MediaRecorderPrivate): * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp: (WebCore::MediaRecorderPrivateAVFImpl::create): (WebCore::MediaRecorderPrivateAVFImpl::~MediaRecorderPrivateAVFImpl): (WebCore::MediaRecorderPrivateAVFImpl::audioSamplesAvailable): (WebCore::MediaRecorderPrivateAVFImpl::stopRecording): (WebCore::MediaRecorderPrivateAVFImpl::fetchData): * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h: * platform/mediarecorder/MediaRecorderPrivateMock.cpp: (WebCore::MediaRecorderPrivateMock::MediaRecorderPrivateMock): (WebCore::MediaRecorderPrivateMock::~MediaRecorderPrivateMock): (WebCore::MediaRecorderPrivateMock::stopRecording): (WebCore::MediaRecorderPrivateMock::sampleBufferUpdated): (WebCore::MediaRecorderPrivateMock::audioSamplesAvailable): (WebCore::MediaRecorderPrivateMock::generateMockCounterString): (WebCore::MediaRecorderPrivateMock::fetchData): * platform/mediarecorder/MediaRecorderPrivateMock.h: * platform/mediastream/AudioTrackPrivateMediaStream.cpp: (WebCore::AudioTrackPrivateMediaStream::AudioTrackPrivateMediaStream): (WebCore::AudioTrackPrivateMediaStream::clear): (WebCore::AudioTrackPrivateMediaStream::play): (WebCore::AudioTrackPrivateMediaStream::pause): (WebCore::AudioTrackPrivateMediaStream::setMuted): (WebCore::AudioTrackPrivateMediaStream::audioSamplesAvailable): (WebCore::AudioTrackPrivateMediaStream::trackMutedChanged): (WebCore::AudioTrackPrivateMediaStream::trackEnabledChanged): (WebCore::AudioTrackPrivateMediaStream::trackEnded): (WebCore::AudioTrackPrivateMediaStream::updateRenderer): (WebCore::AudioTrackPrivateMediaStream::startRenderer): (WebCore::AudioTrackPrivateMediaStream::stopRenderer): * platform/mediastream/AudioTrackPrivateMediaStream.h: * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp: (WebCore::webkitMediaStreamSrcFinalize): (WebCore::webkitMediaStreamSrcChangeState): (WebCore::webkitMediaStreamSrcSetupSrc): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::forEachTrack): * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::forEachObserver const): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::hasStartedProducingAudioData): * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addAudioSampleObserver): (WebCore::RealtimeMediaSource::removeAudioSampleObserver): (WebCore::RealtimeMediaSource::addObserver): (WebCore::RealtimeMediaSource::removeObserver): (WebCore::RealtimeMediaSource::forEachObserver const): (WebCore::RealtimeMediaSource::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/RealtimeOutgoingAudioSource.cpp: (WebCore::RealtimeOutgoingAudioSource::~RealtimeOutgoingAudioSource): (WebCore::RealtimeOutgoingAudioSource::observeSource): (WebCore::RealtimeOutgoingAudioSource::unobserveSource): * platform/mediastream/RealtimeOutgoingAudioSource.h: * platform/mediastream/WebAudioSourceProvider.h: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: (WebCore::WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC): (WebCore::WebAudioSourceProviderAVFObjC::~WebAudioSourceProviderAVFObjC): (WebCore::WebAudioSourceProviderAVFObjC::trackEnabledChanged): (WebCore::WebAudioSourceProviderAVFObjC::audioSamplesAvailable): * testing/Internals.cpp: (WebCore::Internals::~Internals): (WebCore::createRecorderMockSource): (WebCore::Internals::observeMediaStreamTrack): (WebCore::Internals::videoSampleAvailable): * testing/Internals.h: Source/WebKit: Update SourceProxy to be an AudioSampleObserver. Update MediaRecorder to only listen for audio samples if GPU remote writer is successfully created. It also stops listening to audio samples as soon as stopping the recording. * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::SourceProxy::SourceProxy): (WebKit::UserMediaCaptureManagerProxy::SourceProxy::~SourceProxy): * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp: (WebKit::MediaRecorderPrivate::MediaRecorderPrivate): (WebKit::MediaRecorderPrivate::~MediaRecorderPrivate): (WebKit::MediaRecorderPrivate::audioSamplesAvailable): (WebKit::MediaRecorderPrivate::stopRecording): * WebProcess/GPU/webrtc/MediaRecorderPrivate.h: * WebProcess/GPU/webrtc/MediaRecorderProvider.cpp: (WebKit::MediaRecorderProvider::createMediaRecorderPrivate): * WebProcess/GPU/webrtc/MediaRecorderProvider.h: Canonical link: https://commits.webkit.org/223217@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@259861 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-04-10 10:58:42 +00:00
ASSERT(isMainThread());
Make use of WeakHashSet for MediaStreamTrackPrivate and RealtimeMediaSource observers https://bugs.webkit.org/show_bug.cgi?id=210492 Reviewed by Geoffrey Garen. Source/WebCore: We are making use of WeakHashSet to improve the robustness of the code. For that purpose we use the new WeakHashSet::forEach method. No change of behavior. * Modules/mediarecorder/MediaRecorder.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::forEachObserver const): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::forEachObserver): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::forEachObserver const): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::hasObserver const): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addAudioSampleObserver): (WebCore::RealtimeMediaSource::removeAudioSampleObserver): (WebCore::RealtimeMediaSource::addObserver): (WebCore::RealtimeMediaSource::removeObserver): (WebCore::RealtimeMediaSource::forEachObserver): (WebCore::RealtimeMediaSource::notifyMutedObservers): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::forEachObserver const): Deleted. (WebCore::RealtimeMediaSource::notifyMutedObservers const): Deleted. * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/RealtimeOutgoingVideoSource.h: Source/WTF: * wtf/WeakHashSet.h: Canonical link: https://commits.webkit.org/223514@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@260241 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-04-17 08:40:52 +00:00
m_observers.remove(observer);
[MediaStream] Clean up MediaStream private interfaces https://bugs.webkit.org/show_bug.cgi?id=149381 Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrack): (WebCore::MediaStream::didRemoveTrack): (WebCore::MediaStream::registry): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::didAddTrackToPrivate): Deleted. (WebCore::MediaStream::didRemoveTrackFromPrivate): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamRegistry.cpp: (WebCore::MediaStreamRegistry::lookup): (WebCore::MediaStreamRegistry::MediaStreamRegistry): * Modules/mediastream/MediaStreamRegistry.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::removeObserver): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::trackStatesChanged): (WebCore::MediaStreamTrack::configureTrackRendering): * Modules/mediastream/MediaStreamTrack.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::supportsType): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::load): * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.h: * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.mm: (WebCore::MediaStreamPrivateAVFObjC::create): (WebCore::MediaStreamPrivateAVFObjC::MediaStreamPrivateAVFObjC): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::~MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivateClient::~MediaStreamPrivateClient): (WebCore::MediaStreamPrivate::id): (WebCore::MediaStreamPrivate::active): (WebCore::MediaStreamPrivate::MediaStreamPrivate): Deleted. (WebCore::MediaStreamPrivate::~MediaStreamPrivate): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceStatesChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::~Observer): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::startProducingData): (WebCore::MediaStreamTrackPrivate::stopProducingData): (WebCore::MediaStreamTrackPrivate::setMuted): (WebCore::MediaStreamTrackPrivateClient::~MediaStreamTrackPrivateClient): Deleted. (WebCore::MediaStreamTrackPrivate::setClient): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/MediaStreamTrackSourcesRequestClient.h: (WebCore::TrackSourceInfo::create): (WebCore::TrackSourceInfo::id): (WebCore::TrackSourceInfo::label): (WebCore::TrackSourceInfo::groupId): (WebCore::TrackSourceInfo::kind): (WebCore::TrackSourceInfo::TrackSourceInfo): (WebCore::TrackSourceInfo::deviceId): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::statesDidChanged): (WebCore::RealtimeMediaSource::readonly): * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::id): (WebCore::RealtimeMediaSource::persistentId): (WebCore::RealtimeMediaSource::setPersistentId): (WebCore::RealtimeMediaSource::type): (WebCore::RealtimeMediaSource::stopped): * platform/mediastream/RealtimeMediaSourceCenter.h: * platform/mediastream/mac/AVCaptureDeviceManager.mm: (WebCore::AVCaptureDeviceManager::getSourcesInfo): * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp: (WebCore::RealtimeMediaSourceCenterMac::~RealtimeMediaSourceCenterMac): (WebCore::RealtimeMediaSourceCenterMac::validateRequestConstraints): (WebCore::RealtimeMediaSourceCenterMac::createMediaStream): (WebCore::RealtimeMediaSourceCenterMac::getMediaStreamTrackSources): * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h: * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::~RealtimeMediaSourceCenterOwr): (WebCore::RealtimeMediaSourceCenterOwr::validateRequestConstraints): * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h: * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::registerMockRealtimeMediaSourceCenter): (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints): (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): (WebCore::MockRealtimeMediaSourceCenter::getMediaStreamTrackSources): * platform/mock/MockRealtimeMediaSourceCenter.h: Canonical link: https://commits.webkit.org/167504@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190072 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-09-21 20:09:51 +00:00
}
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
const String& MediaStreamTrackPrivate::label() const
{
WebRTC: Update the MediaStream API https://bugs.webkit.org/show_bug.cgi?id=146313 Reviewed by Eric Carlson. Source/WebCore: Update the MediaStream API (MediaStream, MediaStreamTrack and RealtimeMediaSource) to match the Media Capture and Stream specification [1]. Notable changes: Updated event handling to synchronously update corresponding state/attributes as events are dispatched. Removed 'new' state from MediaStreamTrack. A track is either 'live' or 'ended'. As a consequence 'started' event is also removed. MediaStreamTrack always has a source (disconnected source concept was removed from the spec). Therefore, more state can be kept at the source without going away. Calculate MediaStream.active internally, from the track set, instead of setting it externally. Updated RealtimeMediaSource Observer interface. Replaced MediaStream's separate audio and video track lists with a single track set (more aligned with spec). Updated MediaStream constructor to adopt instead of clone track arguments (or tracks from MediaStream argument). Removed MediaStreamTrack.getSources() and corresponding test (removed from spec). Test status: 3 added, 8 existing enabled (some updated) and 1 removed. [1] http://w3c.github.io/mediacapture-main/archives/20150523/getusermedia.html Tests: fast/mediastream/MediaStreamTrack-clone.html fast/mediastream/MediaStreamTrack-kind.html fast/mediastream/MediaStreamTrack-stop.html * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::contextDestroyed): (WebCore::MediaStream::trackDidEnd): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrackToPrivate): (WebCore::MediaStream::didRemoveTrackFromPrivate): (WebCore::MediaStream::internalAddTrack): (WebCore::MediaStream::internalRemoveTrack): (WebCore::MediaStream::scheduleActiveStateChange): (WebCore::MediaStream::activityEventTimerFired): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::~MediaStream): Deleted. (WebCore::MediaStream::registry): Deleted. (WebCore::MediaStream::addObserver): Deleted. (WebCore::MediaStream::removeObserver): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStream.idl: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::id): (WebCore::MediaStreamTrack::label): (WebCore::MediaStreamTrack::enabled): (WebCore::MediaStreamTrack::setEnabled): (WebCore::MediaStreamTrack::muted): (WebCore::MediaStreamTrack::readonly): (WebCore::MediaStreamTrack::remote): (WebCore::MediaStreamTrack::readyState): (WebCore::MediaStreamTrack::ended): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::getCapabilities): (WebCore::MediaStreamTrack::applyConstraints): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::stop): (WebCore::MediaStreamTrack::getConstraints): Deleted. (WebCore::MediaStreamTrack::addObserver): Deleted. (WebCore::MediaStreamTrack::removeObserver): Deleted. (WebCore::MediaStreamTrack::configureTrackRendering): Deleted. (WebCore::MediaStreamTrack::activeDOMObjectName): Deleted. (WebCore::MediaStreamTrack::canSuspendForPageCache): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: * Modules/mediastream/RTCPeerConnection.cpp: (WebCore::RTCPeerConnection::didRemoveRemoteStream): Deleted. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::didCreateStream): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::updateActiveState): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivate::active): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::type): (WebCore::MediaStreamTrackPrivate::applyConstraints): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::muted): Deleted. (WebCore::MediaStreamTrackPrivate::readonly): Deleted. (WebCore::MediaStreamTrackPrivate::remote): Deleted. (WebCore::MediaStreamTrackPrivate::constraints): Deleted. (WebCore::MediaStreamTrackPrivate::states): Deleted. (WebCore::MediaStreamTrackPrivate::capabilities): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::id): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::enabled): (WebCore::MediaStreamTrackPrivate::setClient): (WebCore::MediaStreamTrackPrivate::source): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::readonly): (WebCore::RealtimeMediaSource::stop): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::addObserver): Deleted. (WebCore::RealtimeMediaSource::removeObserver): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::stopped): (WebCore::RealtimeMediaSource::id): Deleted. (WebCore::RealtimeMediaSource::muted): Deleted. (WebCore::RealtimeMediaSource::setReadonly): Deleted. * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream): Deleted. * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): Deleted. LayoutTests: Test status: 3 added, 8 existing enabled (some updated) and 1 removed. * TestExpectations: * fast/mediastream/MediaStream-add-ended-tracks-expected.txt: * fast/mediastream/MediaStream-add-ended-tracks.html: * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: * fast/mediastream/MediaStream-add-remove-tracks.html: * fast/mediastream/MediaStream-add-tracks-to-inactive-stream.html: * fast/mediastream/MediaStream-clone-expected.txt: Added. * fast/mediastream/MediaStream-clone.html: * fast/mediastream/MediaStream-construct-with-ended-tracks-expected.txt: Added. * fast/mediastream/MediaStream-construct-with-ended-tracks.html: * fast/mediastream/MediaStream-getTracks-expected.txt: * fast/mediastream/MediaStream-getTracks.html: * fast/mediastream/MediaStreamConstructor.html: * fast/mediastream/MediaStreamTrack-clone-expected.txt: Added. * fast/mediastream/MediaStreamTrack-clone.html: Added. * fast/mediastream/MediaStreamTrack-getSources-expected.txt: Removed. * fast/mediastream/MediaStreamTrack-getSources.html: Removed. Tested method removed from spec. * fast/mediastream/MediaStreamTrack-kind-expected.txt: Added. * fast/mediastream/MediaStreamTrack-kind.html: Added. * fast/mediastream/MediaStreamTrack-stop-expected.txt: Added. * fast/mediastream/MediaStreamTrack-stop.html: Added. * fast/mediastream/MediaStreamTrackEvent-constructor-expected.txt: * fast/mediastream/MediaStreamTrackEvent-constructor.html: * fast/mediastream/resources/getUserMedia-helper.js: Added. (.reject): (getUserMedia): (defaultRejectOrCatch): * platform/gtk/TestExpectations: Canonical link: https://commits.webkit.org/164511@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@186081 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-06-29 19:52:21 +00:00
return m_source->name();
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
}
void MediaStreamTrackPrivate::setContentHint(HintValue hintValue)
{
m_contentHint = hintValue;
}
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
bool MediaStreamTrackPrivate::muted() const
{
return m_source->muted();
}
MediaStreamTrack remote() no longer exists https://bugs.webkit.org/show_bug.cgi?id=169734 Patch by Youenn Fablet <youenn@apple.com> on 2017-03-16 Reviewed by Alex Christensen. Removing MediaStreamTrack remote. Removing RealtimeMediaSource::remote as isCaptureSource which is closer to its use in MediaStreamPrivate to detect whether sources are capture sources or not. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::mediaState): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::hasCaptureVideoSource): (WebCore::MediaStreamPrivate::hasCaptureAudioSource): (WebCore::MediaStreamPrivate::hasLocalVideoSource): Deleted. (WebCore::MediaStreamPrivate::hasLocalAudioSource): Deleted. * platform/mediastream/MediaStreamPrivate.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::remote): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: * Modules/webaudio/MediaStreamAudioSource.h: * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::hasLocalVideoSource): (WebCore::MediaStreamPrivate::hasLocalAudioSource): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::isCaptureTrack): (WebCore::MediaStreamTrackPrivate::remote): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::reset): * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::isCaptureSource): (WebCore::RealtimeMediaSource::remote): Deleted. (WebCore::RealtimeMediaSource::setRemote): Deleted. * platform/mediastream/mac/AVMediaCaptureSource.h: * platform/mock/MockRealtimeAudioSource.h: * platform/mock/MockRealtimeVideoSource.h: Canonical link: https://commits.webkit.org/186714@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@214042 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-16 15:21:11 +00:00
bool MediaStreamTrackPrivate::isCaptureTrack() const
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
{
MediaStreamTrack remote() no longer exists https://bugs.webkit.org/show_bug.cgi?id=169734 Patch by Youenn Fablet <youenn@apple.com> on 2017-03-16 Reviewed by Alex Christensen. Removing MediaStreamTrack remote. Removing RealtimeMediaSource::remote as isCaptureSource which is closer to its use in MediaStreamPrivate to detect whether sources are capture sources or not. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::mediaState): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::hasCaptureVideoSource): (WebCore::MediaStreamPrivate::hasCaptureAudioSource): (WebCore::MediaStreamPrivate::hasLocalVideoSource): Deleted. (WebCore::MediaStreamPrivate::hasLocalAudioSource): Deleted. * platform/mediastream/MediaStreamPrivate.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::remote): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: * Modules/webaudio/MediaStreamAudioSource.h: * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::hasLocalVideoSource): (WebCore::MediaStreamPrivate::hasLocalAudioSource): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::isCaptureTrack): (WebCore::MediaStreamTrackPrivate::remote): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::reset): * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::isCaptureSource): (WebCore::RealtimeMediaSource::remote): Deleted. (WebCore::RealtimeMediaSource::setRemote): Deleted. * platform/mediastream/mac/AVMediaCaptureSource.h: * platform/mock/MockRealtimeAudioSource.h: * platform/mock/MockRealtimeVideoSource.h: Canonical link: https://commits.webkit.org/186714@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@214042 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-16 15:21:11 +00:00
return m_source->isCaptureSource();
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
}
void MediaStreamTrackPrivate::setEnabled(bool enabled)
{
[MediaStream] VideoTrack should respond to MediaStreamTrack state changes https://bugs.webkit.org/show_bug.cgi?id=151299 Reviewed by Jer Noble. Source/WebCore: Test: fast/mediastream/MediaStream-video-element-track-stop.html * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::ended): Check m_ended. (WebCore::MediaStreamTrack::stopProducingData): Set m_ended before telling private track to stop so we won't fire an 'ended' event. (WebCore::MediaStreamTrack::trackEnded): Set m_ended, add comments from spec. * Modules/mediastream/MediaStreamTrack.h: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Live streams have infinite duration, not indefinite. * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformLayer): Return NULL when displayMode is None. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Calculate current displayMode based on MediaStream state. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode): Renamed from setPausedImageVisible, use m_displayMode. Don't start/stop clock, it makes more sense to do that in play and pause. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): Start clock. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): Stop clock. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): Call updateDisplayMode. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::activeStatusChanged): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateIntrinsicSize): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::createPreviewLayers): Always try to create both layers if necessary. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::renderingModeChanged): New, update displayMode and call back to the media element. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): Get rid of some unused locals. React to a change in the enabled video track. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext): Paint black when the active video track is disabled. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setPausedImageVisible): Deleted. * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::updateActiveState): Split the logic of updating the active video track out into updateActiveVideoTrack. (WebCore::MediaStreamPrivate::hasVideo): Check for track.ended. (WebCore::MediaStreamPrivate::hasAudio): Ditto. (WebCore::MediaStreamPrivate::paintCurrentFrameInContext): Don't call the source directly. (WebCore::MediaStreamPrivate::updateActiveVideoTrack): New. (WebCore::MediaStreamPrivate::trackEnabledChanged): Call updateActiveVideoTrack. (WebCore::MediaStreamPrivate::trackEnded): new. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::setEnabled): Call observers if enabled state changes. (WebCore::MediaStreamTrackPrivate::endTrack): Call observers. (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): New. (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): Add comments. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::paintCurrentFrameInContext): Remove a commented-out line. LayoutTests: * fast/mediastream/MediaStream-video-element-expected.txt: * fast/mediastream/MediaStream-video-element-track-stop-expected.txt: Added. * fast/mediastream/MediaStream-video-element-track-stop.html: Added. * fast/mediastream/MediaStream-video-element.html: * platform/gtk/TestExpectations: Skip new test. * platform/ios-simulator/TestExpectations: Ditto. * platform/mac-wk2/TestExpectations: Ditto. * platform/win/TestExpectations: Ditto. Canonical link: https://commits.webkit.org/169494@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@192503 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-11-17 02:52:16 +00:00
if (m_isEnabled == enabled)
return;
Add more MediaStream logging https://bugs.webkit.org/show_bug.cgi?id=223143 <rdar://problem/75380363> Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopTrack): (WebCore::MediaStreamTrack::trackStarted): (WebCore::MediaStreamTrack::trackEnded): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::createAudioSourceProvider): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::end): * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource): (WebCore::AVVideoCaptureSource::startProducingData): (WebCore::AVVideoCaptureSource::stopProducingData): (WebCore::AVVideoCaptureSource::shutdownCaptureSession): (WebCore::AVVideoCaptureSource::orientationChanged): Canonical link: https://commits.webkit.org/235243@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@274376 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-03-13 02:01:11 +00:00
ALWAYS_LOG(LOGIDENTIFIER, enabled);
WebRTC: Update the MediaStream API https://bugs.webkit.org/show_bug.cgi?id=146313 Reviewed by Eric Carlson. Source/WebCore: Update the MediaStream API (MediaStream, MediaStreamTrack and RealtimeMediaSource) to match the Media Capture and Stream specification [1]. Notable changes: Updated event handling to synchronously update corresponding state/attributes as events are dispatched. Removed 'new' state from MediaStreamTrack. A track is either 'live' or 'ended'. As a consequence 'started' event is also removed. MediaStreamTrack always has a source (disconnected source concept was removed from the spec). Therefore, more state can be kept at the source without going away. Calculate MediaStream.active internally, from the track set, instead of setting it externally. Updated RealtimeMediaSource Observer interface. Replaced MediaStream's separate audio and video track lists with a single track set (more aligned with spec). Updated MediaStream constructor to adopt instead of clone track arguments (or tracks from MediaStream argument). Removed MediaStreamTrack.getSources() and corresponding test (removed from spec). Test status: 3 added, 8 existing enabled (some updated) and 1 removed. [1] http://w3c.github.io/mediacapture-main/archives/20150523/getusermedia.html Tests: fast/mediastream/MediaStreamTrack-clone.html fast/mediastream/MediaStreamTrack-kind.html fast/mediastream/MediaStreamTrack-stop.html * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::contextDestroyed): (WebCore::MediaStream::trackDidEnd): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrackToPrivate): (WebCore::MediaStream::didRemoveTrackFromPrivate): (WebCore::MediaStream::internalAddTrack): (WebCore::MediaStream::internalRemoveTrack): (WebCore::MediaStream::scheduleActiveStateChange): (WebCore::MediaStream::activityEventTimerFired): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::~MediaStream): Deleted. (WebCore::MediaStream::registry): Deleted. (WebCore::MediaStream::addObserver): Deleted. (WebCore::MediaStream::removeObserver): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStream.idl: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::id): (WebCore::MediaStreamTrack::label): (WebCore::MediaStreamTrack::enabled): (WebCore::MediaStreamTrack::setEnabled): (WebCore::MediaStreamTrack::muted): (WebCore::MediaStreamTrack::readonly): (WebCore::MediaStreamTrack::remote): (WebCore::MediaStreamTrack::readyState): (WebCore::MediaStreamTrack::ended): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::getCapabilities): (WebCore::MediaStreamTrack::applyConstraints): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::stop): (WebCore::MediaStreamTrack::getConstraints): Deleted. (WebCore::MediaStreamTrack::addObserver): Deleted. (WebCore::MediaStreamTrack::removeObserver): Deleted. (WebCore::MediaStreamTrack::configureTrackRendering): Deleted. (WebCore::MediaStreamTrack::activeDOMObjectName): Deleted. (WebCore::MediaStreamTrack::canSuspendForPageCache): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: * Modules/mediastream/RTCPeerConnection.cpp: (WebCore::RTCPeerConnection::didRemoveRemoteStream): Deleted. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::didCreateStream): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::updateActiveState): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivate::active): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::type): (WebCore::MediaStreamTrackPrivate::applyConstraints): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::muted): Deleted. (WebCore::MediaStreamTrackPrivate::readonly): Deleted. (WebCore::MediaStreamTrackPrivate::remote): Deleted. (WebCore::MediaStreamTrackPrivate::constraints): Deleted. (WebCore::MediaStreamTrackPrivate::states): Deleted. (WebCore::MediaStreamTrackPrivate::capabilities): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::id): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::enabled): (WebCore::MediaStreamTrackPrivate::setClient): (WebCore::MediaStreamTrackPrivate::source): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::readonly): (WebCore::RealtimeMediaSource::stop): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::addObserver): Deleted. (WebCore::RealtimeMediaSource::removeObserver): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::stopped): (WebCore::RealtimeMediaSource::id): Deleted. (WebCore::RealtimeMediaSource::muted): Deleted. (WebCore::RealtimeMediaSource::setReadonly): Deleted. * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream): Deleted. * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): Deleted. LayoutTests: Test status: 3 added, 8 existing enabled (some updated) and 1 removed. * TestExpectations: * fast/mediastream/MediaStream-add-ended-tracks-expected.txt: * fast/mediastream/MediaStream-add-ended-tracks.html: * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: * fast/mediastream/MediaStream-add-remove-tracks.html: * fast/mediastream/MediaStream-add-tracks-to-inactive-stream.html: * fast/mediastream/MediaStream-clone-expected.txt: Added. * fast/mediastream/MediaStream-clone.html: * fast/mediastream/MediaStream-construct-with-ended-tracks-expected.txt: Added. * fast/mediastream/MediaStream-construct-with-ended-tracks.html: * fast/mediastream/MediaStream-getTracks-expected.txt: * fast/mediastream/MediaStream-getTracks.html: * fast/mediastream/MediaStreamConstructor.html: * fast/mediastream/MediaStreamTrack-clone-expected.txt: Added. * fast/mediastream/MediaStreamTrack-clone.html: Added. * fast/mediastream/MediaStreamTrack-getSources-expected.txt: Removed. * fast/mediastream/MediaStreamTrack-getSources.html: Removed. Tested method removed from spec. * fast/mediastream/MediaStreamTrack-kind-expected.txt: Added. * fast/mediastream/MediaStreamTrack-kind.html: Added. * fast/mediastream/MediaStreamTrack-stop-expected.txt: Added. * fast/mediastream/MediaStreamTrack-stop.html: Added. * fast/mediastream/MediaStreamTrackEvent-constructor-expected.txt: * fast/mediastream/MediaStreamTrackEvent-constructor.html: * fast/mediastream/resources/getUserMedia-helper.js: Added. (.reject): (getUserMedia): (defaultRejectOrCatch): * platform/gtk/TestExpectations: Canonical link: https://commits.webkit.org/164511@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@186081 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-06-29 19:52:21 +00:00
// Always update the enabled state regardless of the track being ended.
m_isEnabled = enabled;
[MediaStream] VideoTrack should respond to MediaStreamTrack state changes https://bugs.webkit.org/show_bug.cgi?id=151299 Reviewed by Jer Noble. Source/WebCore: Test: fast/mediastream/MediaStream-video-element-track-stop.html * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::ended): Check m_ended. (WebCore::MediaStreamTrack::stopProducingData): Set m_ended before telling private track to stop so we won't fire an 'ended' event. (WebCore::MediaStreamTrack::trackEnded): Set m_ended, add comments from spec. * Modules/mediastream/MediaStreamTrack.h: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Live streams have infinite duration, not indefinite. * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformLayer): Return NULL when displayMode is None. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Calculate current displayMode based on MediaStream state. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode): Renamed from setPausedImageVisible, use m_displayMode. Don't start/stop clock, it makes more sense to do that in play and pause. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): Start clock. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): Stop clock. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): Call updateDisplayMode. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::activeStatusChanged): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateIntrinsicSize): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::createPreviewLayers): Always try to create both layers if necessary. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::renderingModeChanged): New, update displayMode and call back to the media element. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): Get rid of some unused locals. React to a change in the enabled video track. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext): Paint black when the active video track is disabled. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setPausedImageVisible): Deleted. * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::updateActiveState): Split the logic of updating the active video track out into updateActiveVideoTrack. (WebCore::MediaStreamPrivate::hasVideo): Check for track.ended. (WebCore::MediaStreamPrivate::hasAudio): Ditto. (WebCore::MediaStreamPrivate::paintCurrentFrameInContext): Don't call the source directly. (WebCore::MediaStreamPrivate::updateActiveVideoTrack): New. (WebCore::MediaStreamPrivate::trackEnabledChanged): Call updateActiveVideoTrack. (WebCore::MediaStreamPrivate::trackEnded): new. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::setEnabled): Call observers if enabled state changes. (WebCore::MediaStreamTrackPrivate::endTrack): Call observers. (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): New. (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): Add comments. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::paintCurrentFrameInContext): Remove a commented-out line. LayoutTests: * fast/mediastream/MediaStream-video-element-expected.txt: * fast/mediastream/MediaStream-video-element-track-stop-expected.txt: Added. * fast/mediastream/MediaStream-video-element-track-stop.html: Added. * fast/mediastream/MediaStream-video-element.html: * platform/gtk/TestExpectations: Skip new test. * platform/ios-simulator/TestExpectations: Ditto. * platform/mac-wk2/TestExpectations: Ditto. * platform/win/TestExpectations: Ditto. Canonical link: https://commits.webkit.org/169494@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@192503 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-11-17 02:52:16 +00:00
Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable() https://bugs.webkit.org/show_bug.cgi?id=188097 <rdar://problem/42558823> Reviewed by Eric Carlson. Source/WebCore: Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable(). RealtimeMediaSource::audioSamplesAvailable() is called on a background thread but iterates over observers that may get destroyed concurrently on the main thread. To address the issue: - Introduce a Lock to protect m_observer accesses - Copy observers to a Vector before iterating over them * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::forEachObserver const): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::sampleBufferUpdated): (WebCore::MediaStreamTrackPrivate::Observer::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addObserver): (WebCore::RealtimeMediaSource::removeObserver): (WebCore::RealtimeMediaSource::forEachObserver const): (WebCore::RealtimeMediaSource::notifyMutedObservers const): (WebCore::RealtimeMediaSource::settingsDidChange): (WebCore::RealtimeMediaSource::videoSampleAvailable): (WebCore::RealtimeMediaSource::audioSamplesAvailable): (WebCore::RealtimeMediaSource::start): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::captureFailed): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp: (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable): * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: Source/WebKit: * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: Canonical link: https://commits.webkit.org/203253@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234334 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-07-27 22:33:52 +00:00
forEachObserver([this](auto& observer) {
observer.trackEnabledChanged(*this);
});
[Mac MediaStream] implement AVFoundation backed MediaStreamSource https://bugs.webkit.org/show_bug.cgi?id=123316 Source/WebCore: Reviewed by Jer Noble No new tests, existing tests updated. * CMakeLists.txt: Add MediaStreamSourceStates.cpp. * Modules/mediastream/MediaSourceStates.cpp: (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates. (WebCore::MediaSourceStates::sourceType): Ditto. (WebCore::MediaSourceStates::facingMode): Ditto. * Modules/mediastream/MediaSourceStates.h: Ditto. * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addRemoteSource): (WebCore::MediaStream::removeRemoteSource): * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the private track do that. Change private track parameter to ref because it can't be NULL. (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto. (WebCore::MediaStreamTrack::setSource): Pass through to private track. (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::states): Ditto. (WebCore::MediaStreamTrack::capabilities): Ditto. (WebCore::MediaStreamTrack::applyConstraints): Ditto. (WebCore::MediaStreamTrack::stopProducingData): Ditto. (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't schedule an 'ended' event if called as a side effect of the stop() method having been called as per spec. (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged. (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged. (WebCore::MediaStreamTrack::stop): Pass through to private track. * Modules/mediastream/MediaStreamTrack.h: (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints. * WebCore.xcodeproj/project.pbxproj: Add new files. * bindings/js/JSMediaSourceStatesCustom.cpp: (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode is Unknown. * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and undefined method prototype. * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None. (WebCore::MediaStreamDescriptor::removeSource): Ditto. (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): * platform/mediastream/MediaStreamSource.cpp: (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes to Live, stopProducingData when it changes to Ended. (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers. (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled. (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have stopped, the spec says that track.stop() should permanently stop the track's source. * platform/mediastream/MediaStreamSource.h: (WebCore::MediaStreamSource::name): Make virtual so derived classes can override. (WebCore::MediaStreamSource::setName): Ditto. (WebCore::MediaStreamSource::readyState): Ditto. (WebCore::MediaStreamSource::enabled): Ditto. (WebCore::MediaStreamSource::muted): Ditto. (WebCore::MediaStreamSource::setReadonly): Ditto. (WebCore::MediaStreamSource::remote): Ditto. (WebCore::MediaStreamSource::setRemote): Ditto. (WebCore::MediaStreamSource::startProducingData): Added. (WebCore::MediaStreamSource::stopProducingData): Added. * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to its own file. * platform/mediastream/MediaStreamSourceStates.cpp: Added. (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the strings are available to platform code. (WebCore::MediaStreamSourceStates::sourceType): Ditto. * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr. (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables. (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer. (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer. (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client. (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source. (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged. (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source. (WebCore::MediaStreamTrackPrivate::states): Ditto. (WebCore::MediaStreamTrackPrivate::type): Ditto. (WebCore::MediaStreamTrackPrivate::capabilities): Ditto. (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto. (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes. (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query. (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/mac/AVAudioCaptureSource.h: Added. * platform/mediastream/mac/AVAudioCaptureSource.mm: Added. * platform/mediastream/mac/AVCaptureDeviceManager.h: Added. * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added. * platform/mediastream/mac/AVMediaCaptureSource.h: Added. * platform/mediastream/mac/AVMediaCaptureSource.mm: Added. * platform/mediastream/mac/AVVideoCaptureSource.h: Added. * platform/mediastream/mac/AVVideoCaptureSource.mm: Added. * platform/mediastream/mac/MediaStreamCenterMac.cpp: (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement. (WebCore::MediaStreamCenterMac::createMediaStream): Ditto. (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto. * platform/mock/MockMediaStreamCenter.cpp: (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes. (WebCore::MockMediaStreamCenter::createMediaStream): LayoutTests: Reviewed by Jer Noble. * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: Updated. * fast/mediastream/MediaStream-add-remove-tracks.html: Ditto. * fast/mediastream/MediaStreamConstructor-expected.txt: Ditto. * fast/mediastream/MediaStreamConstructor.html: Ditto. * fast/mediastream/MediaStreamTrack-getSources.html: Remove typo. * fast/mediastream/MediaStreamTrack-expected.txt: Updated results. * fast/mediastream/MediaStreamTrack.html: Update to test track.stop() behavior. Canonical link: https://commits.webkit.org/141590@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158220 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-29 20:48:21 +00:00
}
WebRTC: Update the MediaStream API https://bugs.webkit.org/show_bug.cgi?id=146313 Reviewed by Eric Carlson. Source/WebCore: Update the MediaStream API (MediaStream, MediaStreamTrack and RealtimeMediaSource) to match the Media Capture and Stream specification [1]. Notable changes: Updated event handling to synchronously update corresponding state/attributes as events are dispatched. Removed 'new' state from MediaStreamTrack. A track is either 'live' or 'ended'. As a consequence 'started' event is also removed. MediaStreamTrack always has a source (disconnected source concept was removed from the spec). Therefore, more state can be kept at the source without going away. Calculate MediaStream.active internally, from the track set, instead of setting it externally. Updated RealtimeMediaSource Observer interface. Replaced MediaStream's separate audio and video track lists with a single track set (more aligned with spec). Updated MediaStream constructor to adopt instead of clone track arguments (or tracks from MediaStream argument). Removed MediaStreamTrack.getSources() and corresponding test (removed from spec). Test status: 3 added, 8 existing enabled (some updated) and 1 removed. [1] http://w3c.github.io/mediacapture-main/archives/20150523/getusermedia.html Tests: fast/mediastream/MediaStreamTrack-clone.html fast/mediastream/MediaStreamTrack-kind.html fast/mediastream/MediaStreamTrack-stop.html * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::contextDestroyed): (WebCore::MediaStream::trackDidEnd): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrackToPrivate): (WebCore::MediaStream::didRemoveTrackFromPrivate): (WebCore::MediaStream::internalAddTrack): (WebCore::MediaStream::internalRemoveTrack): (WebCore::MediaStream::scheduleActiveStateChange): (WebCore::MediaStream::activityEventTimerFired): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::~MediaStream): Deleted. (WebCore::MediaStream::registry): Deleted. (WebCore::MediaStream::addObserver): Deleted. (WebCore::MediaStream::removeObserver): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStream.idl: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::id): (WebCore::MediaStreamTrack::label): (WebCore::MediaStreamTrack::enabled): (WebCore::MediaStreamTrack::setEnabled): (WebCore::MediaStreamTrack::muted): (WebCore::MediaStreamTrack::readonly): (WebCore::MediaStreamTrack::remote): (WebCore::MediaStreamTrack::readyState): (WebCore::MediaStreamTrack::ended): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::getCapabilities): (WebCore::MediaStreamTrack::applyConstraints): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::stop): (WebCore::MediaStreamTrack::getConstraints): Deleted. (WebCore::MediaStreamTrack::addObserver): Deleted. (WebCore::MediaStreamTrack::removeObserver): Deleted. (WebCore::MediaStreamTrack::configureTrackRendering): Deleted. (WebCore::MediaStreamTrack::activeDOMObjectName): Deleted. (WebCore::MediaStreamTrack::canSuspendForPageCache): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: * Modules/mediastream/RTCPeerConnection.cpp: (WebCore::RTCPeerConnection::didRemoveRemoteStream): Deleted. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::didCreateStream): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::updateActiveState): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivate::active): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::type): (WebCore::MediaStreamTrackPrivate::applyConstraints): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::muted): Deleted. (WebCore::MediaStreamTrackPrivate::readonly): Deleted. (WebCore::MediaStreamTrackPrivate::remote): Deleted. (WebCore::MediaStreamTrackPrivate::constraints): Deleted. (WebCore::MediaStreamTrackPrivate::states): Deleted. (WebCore::MediaStreamTrackPrivate::capabilities): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::id): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::enabled): (WebCore::MediaStreamTrackPrivate::setClient): (WebCore::MediaStreamTrackPrivate::source): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::readonly): (WebCore::RealtimeMediaSource::stop): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::addObserver): Deleted. (WebCore::RealtimeMediaSource::removeObserver): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::stopped): (WebCore::RealtimeMediaSource::id): Deleted. (WebCore::RealtimeMediaSource::muted): Deleted. (WebCore::RealtimeMediaSource::setReadonly): Deleted. * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream): Deleted. * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): Deleted. LayoutTests: Test status: 3 added, 8 existing enabled (some updated) and 1 removed. * TestExpectations: * fast/mediastream/MediaStream-add-ended-tracks-expected.txt: * fast/mediastream/MediaStream-add-ended-tracks.html: * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: * fast/mediastream/MediaStream-add-remove-tracks.html: * fast/mediastream/MediaStream-add-tracks-to-inactive-stream.html: * fast/mediastream/MediaStream-clone-expected.txt: Added. * fast/mediastream/MediaStream-clone.html: * fast/mediastream/MediaStream-construct-with-ended-tracks-expected.txt: Added. * fast/mediastream/MediaStream-construct-with-ended-tracks.html: * fast/mediastream/MediaStream-getTracks-expected.txt: * fast/mediastream/MediaStream-getTracks.html: * fast/mediastream/MediaStreamConstructor.html: * fast/mediastream/MediaStreamTrack-clone-expected.txt: Added. * fast/mediastream/MediaStreamTrack-clone.html: Added. * fast/mediastream/MediaStreamTrack-getSources-expected.txt: Removed. * fast/mediastream/MediaStreamTrack-getSources.html: Removed. Tested method removed from spec. * fast/mediastream/MediaStreamTrack-kind-expected.txt: Added. * fast/mediastream/MediaStreamTrack-kind.html: Added. * fast/mediastream/MediaStreamTrack-stop-expected.txt: Added. * fast/mediastream/MediaStreamTrack-stop.html: Added. * fast/mediastream/MediaStreamTrackEvent-constructor-expected.txt: * fast/mediastream/MediaStreamTrackEvent-constructor.html: * fast/mediastream/resources/getUserMedia-helper.js: Added. (.reject): (getUserMedia): (defaultRejectOrCatch): * platform/gtk/TestExpectations: Canonical link: https://commits.webkit.org/164511@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@186081 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-06-29 19:52:21 +00:00
void MediaStreamTrackPrivate::endTrack()
[Mac MediaStream] implement AVFoundation backed MediaStreamSource https://bugs.webkit.org/show_bug.cgi?id=123316 Source/WebCore: Reviewed by Jer Noble No new tests, existing tests updated. * CMakeLists.txt: Add MediaStreamSourceStates.cpp. * Modules/mediastream/MediaSourceStates.cpp: (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates. (WebCore::MediaSourceStates::sourceType): Ditto. (WebCore::MediaSourceStates::facingMode): Ditto. * Modules/mediastream/MediaSourceStates.h: Ditto. * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addRemoteSource): (WebCore::MediaStream::removeRemoteSource): * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the private track do that. Change private track parameter to ref because it can't be NULL. (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto. (WebCore::MediaStreamTrack::setSource): Pass through to private track. (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::states): Ditto. (WebCore::MediaStreamTrack::capabilities): Ditto. (WebCore::MediaStreamTrack::applyConstraints): Ditto. (WebCore::MediaStreamTrack::stopProducingData): Ditto. (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't schedule an 'ended' event if called as a side effect of the stop() method having been called as per spec. (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged. (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged. (WebCore::MediaStreamTrack::stop): Pass through to private track. * Modules/mediastream/MediaStreamTrack.h: (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints. * WebCore.xcodeproj/project.pbxproj: Add new files. * bindings/js/JSMediaSourceStatesCustom.cpp: (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode is Unknown. * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and undefined method prototype. * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None. (WebCore::MediaStreamDescriptor::removeSource): Ditto. (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): * platform/mediastream/MediaStreamSource.cpp: (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes to Live, stopProducingData when it changes to Ended. (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers. (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled. (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have stopped, the spec says that track.stop() should permanently stop the track's source. * platform/mediastream/MediaStreamSource.h: (WebCore::MediaStreamSource::name): Make virtual so derived classes can override. (WebCore::MediaStreamSource::setName): Ditto. (WebCore::MediaStreamSource::readyState): Ditto. (WebCore::MediaStreamSource::enabled): Ditto. (WebCore::MediaStreamSource::muted): Ditto. (WebCore::MediaStreamSource::setReadonly): Ditto. (WebCore::MediaStreamSource::remote): Ditto. (WebCore::MediaStreamSource::setRemote): Ditto. (WebCore::MediaStreamSource::startProducingData): Added. (WebCore::MediaStreamSource::stopProducingData): Added. * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to its own file. * platform/mediastream/MediaStreamSourceStates.cpp: Added. (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the strings are available to platform code. (WebCore::MediaStreamSourceStates::sourceType): Ditto. * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr. (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables. (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer. (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer. (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client. (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source. (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged. (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source. (WebCore::MediaStreamTrackPrivate::states): Ditto. (WebCore::MediaStreamTrackPrivate::type): Ditto. (WebCore::MediaStreamTrackPrivate::capabilities): Ditto. (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto. (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes. (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query. (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/mac/AVAudioCaptureSource.h: Added. * platform/mediastream/mac/AVAudioCaptureSource.mm: Added. * platform/mediastream/mac/AVCaptureDeviceManager.h: Added. * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added. * platform/mediastream/mac/AVMediaCaptureSource.h: Added. * platform/mediastream/mac/AVMediaCaptureSource.mm: Added. * platform/mediastream/mac/AVVideoCaptureSource.h: Added. * platform/mediastream/mac/AVVideoCaptureSource.mm: Added. * platform/mediastream/mac/MediaStreamCenterMac.cpp: (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement. (WebCore::MediaStreamCenterMac::createMediaStream): Ditto. (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto. * platform/mock/MockMediaStreamCenter.cpp: (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes. (WebCore::MockMediaStreamCenter::createMediaStream): LayoutTests: Reviewed by Jer Noble. * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: Updated. * fast/mediastream/MediaStream-add-remove-tracks.html: Ditto. * fast/mediastream/MediaStreamConstructor-expected.txt: Ditto. * fast/mediastream/MediaStreamConstructor.html: Ditto. * fast/mediastream/MediaStreamTrack-getSources.html: Remove typo. * fast/mediastream/MediaStreamTrack-expected.txt: Updated results. * fast/mediastream/MediaStreamTrack.html: Update to test track.stop() behavior. Canonical link: https://commits.webkit.org/141590@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158220 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-29 20:48:21 +00:00
{
[MediaStream] Clean up MediaStream private interfaces https://bugs.webkit.org/show_bug.cgi?id=149381 Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrack): (WebCore::MediaStream::didRemoveTrack): (WebCore::MediaStream::registry): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::didAddTrackToPrivate): Deleted. (WebCore::MediaStream::didRemoveTrackFromPrivate): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamRegistry.cpp: (WebCore::MediaStreamRegistry::lookup): (WebCore::MediaStreamRegistry::MediaStreamRegistry): * Modules/mediastream/MediaStreamRegistry.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::removeObserver): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::trackStatesChanged): (WebCore::MediaStreamTrack::configureTrackRendering): * Modules/mediastream/MediaStreamTrack.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::supportsType): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::load): * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.h: * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.mm: (WebCore::MediaStreamPrivateAVFObjC::create): (WebCore::MediaStreamPrivateAVFObjC::MediaStreamPrivateAVFObjC): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::~MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivateClient::~MediaStreamPrivateClient): (WebCore::MediaStreamPrivate::id): (WebCore::MediaStreamPrivate::active): (WebCore::MediaStreamPrivate::MediaStreamPrivate): Deleted. (WebCore::MediaStreamPrivate::~MediaStreamPrivate): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceStatesChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::~Observer): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::startProducingData): (WebCore::MediaStreamTrackPrivate::stopProducingData): (WebCore::MediaStreamTrackPrivate::setMuted): (WebCore::MediaStreamTrackPrivateClient::~MediaStreamTrackPrivateClient): Deleted. (WebCore::MediaStreamTrackPrivate::setClient): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/MediaStreamTrackSourcesRequestClient.h: (WebCore::TrackSourceInfo::create): (WebCore::TrackSourceInfo::id): (WebCore::TrackSourceInfo::label): (WebCore::TrackSourceInfo::groupId): (WebCore::TrackSourceInfo::kind): (WebCore::TrackSourceInfo::TrackSourceInfo): (WebCore::TrackSourceInfo::deviceId): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::statesDidChanged): (WebCore::RealtimeMediaSource::readonly): * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::id): (WebCore::RealtimeMediaSource::persistentId): (WebCore::RealtimeMediaSource::setPersistentId): (WebCore::RealtimeMediaSource::type): (WebCore::RealtimeMediaSource::stopped): * platform/mediastream/RealtimeMediaSourceCenter.h: * platform/mediastream/mac/AVCaptureDeviceManager.mm: (WebCore::AVCaptureDeviceManager::getSourcesInfo): * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp: (WebCore::RealtimeMediaSourceCenterMac::~RealtimeMediaSourceCenterMac): (WebCore::RealtimeMediaSourceCenterMac::validateRequestConstraints): (WebCore::RealtimeMediaSourceCenterMac::createMediaStream): (WebCore::RealtimeMediaSourceCenterMac::getMediaStreamTrackSources): * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h: * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::~RealtimeMediaSourceCenterOwr): (WebCore::RealtimeMediaSourceCenterOwr::validateRequestConstraints): * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h: * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::registerMockRealtimeMediaSourceCenter): (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints): (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): (WebCore::MockRealtimeMediaSourceCenter::getMediaStreamTrackSources): * platform/mock/MockRealtimeMediaSourceCenter.h: Canonical link: https://commits.webkit.org/167504@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190072 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-09-21 20:09:51 +00:00
if (m_isEnded)
[Mac MediaStream] implement AVFoundation backed MediaStreamSource https://bugs.webkit.org/show_bug.cgi?id=123316 Source/WebCore: Reviewed by Jer Noble No new tests, existing tests updated. * CMakeLists.txt: Add MediaStreamSourceStates.cpp. * Modules/mediastream/MediaSourceStates.cpp: (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates. (WebCore::MediaSourceStates::sourceType): Ditto. (WebCore::MediaSourceStates::facingMode): Ditto. * Modules/mediastream/MediaSourceStates.h: Ditto. * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addRemoteSource): (WebCore::MediaStream::removeRemoteSource): * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the private track do that. Change private track parameter to ref because it can't be NULL. (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto. (WebCore::MediaStreamTrack::setSource): Pass through to private track. (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::states): Ditto. (WebCore::MediaStreamTrack::capabilities): Ditto. (WebCore::MediaStreamTrack::applyConstraints): Ditto. (WebCore::MediaStreamTrack::stopProducingData): Ditto. (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't schedule an 'ended' event if called as a side effect of the stop() method having been called as per spec. (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged. (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged. (WebCore::MediaStreamTrack::stop): Pass through to private track. * Modules/mediastream/MediaStreamTrack.h: (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints. * WebCore.xcodeproj/project.pbxproj: Add new files. * bindings/js/JSMediaSourceStatesCustom.cpp: (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode is Unknown. * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and undefined method prototype. * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None. (WebCore::MediaStreamDescriptor::removeSource): Ditto. (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): * platform/mediastream/MediaStreamSource.cpp: (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes to Live, stopProducingData when it changes to Ended. (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers. (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled. (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have stopped, the spec says that track.stop() should permanently stop the track's source. * platform/mediastream/MediaStreamSource.h: (WebCore::MediaStreamSource::name): Make virtual so derived classes can override. (WebCore::MediaStreamSource::setName): Ditto. (WebCore::MediaStreamSource::readyState): Ditto. (WebCore::MediaStreamSource::enabled): Ditto. (WebCore::MediaStreamSource::muted): Ditto. (WebCore::MediaStreamSource::setReadonly): Ditto. (WebCore::MediaStreamSource::remote): Ditto. (WebCore::MediaStreamSource::setRemote): Ditto. (WebCore::MediaStreamSource::startProducingData): Added. (WebCore::MediaStreamSource::stopProducingData): Added. * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to its own file. * platform/mediastream/MediaStreamSourceStates.cpp: Added. (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the strings are available to platform code. (WebCore::MediaStreamSourceStates::sourceType): Ditto. * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr. (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables. (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer. (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer. (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client. (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source. (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged. (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source. (WebCore::MediaStreamTrackPrivate::states): Ditto. (WebCore::MediaStreamTrackPrivate::type): Ditto. (WebCore::MediaStreamTrackPrivate::capabilities): Ditto. (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto. (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes. (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query. (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/mac/AVAudioCaptureSource.h: Added. * platform/mediastream/mac/AVAudioCaptureSource.mm: Added. * platform/mediastream/mac/AVCaptureDeviceManager.h: Added. * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added. * platform/mediastream/mac/AVMediaCaptureSource.h: Added. * platform/mediastream/mac/AVMediaCaptureSource.mm: Added. * platform/mediastream/mac/AVVideoCaptureSource.h: Added. * platform/mediastream/mac/AVVideoCaptureSource.mm: Added. * platform/mediastream/mac/MediaStreamCenterMac.cpp: (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement. (WebCore::MediaStreamCenterMac::createMediaStream): Ditto. (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto. * platform/mock/MockMediaStreamCenter.cpp: (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes. (WebCore::MockMediaStreamCenter::createMediaStream): LayoutTests: Reviewed by Jer Noble. * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: Updated. * fast/mediastream/MediaStream-add-remove-tracks.html: Ditto. * fast/mediastream/MediaStreamConstructor-expected.txt: Ditto. * fast/mediastream/MediaStreamConstructor.html: Ditto. * fast/mediastream/MediaStreamTrack-getSources.html: Remove typo. * fast/mediastream/MediaStreamTrack-expected.txt: Updated results. * fast/mediastream/MediaStreamTrack.html: Update to test track.stop() behavior. Canonical link: https://commits.webkit.org/141590@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158220 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-29 20:48:21 +00:00
return;
Add more MediaStream logging https://bugs.webkit.org/show_bug.cgi?id=223143 <rdar://problem/75380363> Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopTrack): (WebCore::MediaStreamTrack::trackStarted): (WebCore::MediaStreamTrack::trackEnded): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::createAudioSourceProvider): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::end): * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource): (WebCore::AVVideoCaptureSource::startProducingData): (WebCore::AVVideoCaptureSource::stopProducingData): (WebCore::AVVideoCaptureSource::shutdownCaptureSession): (WebCore::AVVideoCaptureSource::orientationChanged): Canonical link: https://commits.webkit.org/235243@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@274376 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-03-13 02:01:11 +00:00
ALWAYS_LOG(LOGIDENTIFIER);
[MediaStream] VideoTrack should respond to MediaStreamTrack state changes https://bugs.webkit.org/show_bug.cgi?id=151299 Reviewed by Jer Noble. Source/WebCore: Test: fast/mediastream/MediaStream-video-element-track-stop.html * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::ended): Check m_ended. (WebCore::MediaStreamTrack::stopProducingData): Set m_ended before telling private track to stop so we won't fire an 'ended' event. (WebCore::MediaStreamTrack::trackEnded): Set m_ended, add comments from spec. * Modules/mediastream/MediaStreamTrack.h: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Live streams have infinite duration, not indefinite. * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformLayer): Return NULL when displayMode is None. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Calculate current displayMode based on MediaStream state. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode): Renamed from setPausedImageVisible, use m_displayMode. Don't start/stop clock, it makes more sense to do that in play and pause. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): Start clock. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): Stop clock. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): Call updateDisplayMode. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::activeStatusChanged): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateIntrinsicSize): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::createPreviewLayers): Always try to create both layers if necessary. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::renderingModeChanged): New, update displayMode and call back to the media element. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): Get rid of some unused locals. React to a change in the enabled video track. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext): Paint black when the active video track is disabled. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setPausedImageVisible): Deleted. * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::updateActiveState): Split the logic of updating the active video track out into updateActiveVideoTrack. (WebCore::MediaStreamPrivate::hasVideo): Check for track.ended. (WebCore::MediaStreamPrivate::hasAudio): Ditto. (WebCore::MediaStreamPrivate::paintCurrentFrameInContext): Don't call the source directly. (WebCore::MediaStreamPrivate::updateActiveVideoTrack): New. (WebCore::MediaStreamPrivate::trackEnabledChanged): Call updateActiveVideoTrack. (WebCore::MediaStreamPrivate::trackEnded): new. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::setEnabled): Call observers if enabled state changes. (WebCore::MediaStreamTrackPrivate::endTrack): Call observers. (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): New. (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): Add comments. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::paintCurrentFrameInContext): Remove a commented-out line. LayoutTests: * fast/mediastream/MediaStream-video-element-expected.txt: * fast/mediastream/MediaStream-video-element-track-stop-expected.txt: Added. * fast/mediastream/MediaStream-video-element-track-stop.html: Added. * fast/mediastream/MediaStream-video-element.html: * platform/gtk/TestExpectations: Skip new test. * platform/ios-simulator/TestExpectations: Ditto. * platform/mac-wk2/TestExpectations: Ditto. * platform/win/TestExpectations: Ditto. Canonical link: https://commits.webkit.org/169494@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@192503 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-11-17 02:52:16 +00:00
// Set m_isEnded to true before telling the source it can stop, so if this is the
// only track using the source and it does stop, we will only call each observer's
// trackEnded method once.
WebRTC: Update the MediaStream API https://bugs.webkit.org/show_bug.cgi?id=146313 Reviewed by Eric Carlson. Source/WebCore: Update the MediaStream API (MediaStream, MediaStreamTrack and RealtimeMediaSource) to match the Media Capture and Stream specification [1]. Notable changes: Updated event handling to synchronously update corresponding state/attributes as events are dispatched. Removed 'new' state from MediaStreamTrack. A track is either 'live' or 'ended'. As a consequence 'started' event is also removed. MediaStreamTrack always has a source (disconnected source concept was removed from the spec). Therefore, more state can be kept at the source without going away. Calculate MediaStream.active internally, from the track set, instead of setting it externally. Updated RealtimeMediaSource Observer interface. Replaced MediaStream's separate audio and video track lists with a single track set (more aligned with spec). Updated MediaStream constructor to adopt instead of clone track arguments (or tracks from MediaStream argument). Removed MediaStreamTrack.getSources() and corresponding test (removed from spec). Test status: 3 added, 8 existing enabled (some updated) and 1 removed. [1] http://w3c.github.io/mediacapture-main/archives/20150523/getusermedia.html Tests: fast/mediastream/MediaStreamTrack-clone.html fast/mediastream/MediaStreamTrack-kind.html fast/mediastream/MediaStreamTrack-stop.html * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::contextDestroyed): (WebCore::MediaStream::trackDidEnd): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrackToPrivate): (WebCore::MediaStream::didRemoveTrackFromPrivate): (WebCore::MediaStream::internalAddTrack): (WebCore::MediaStream::internalRemoveTrack): (WebCore::MediaStream::scheduleActiveStateChange): (WebCore::MediaStream::activityEventTimerFired): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::~MediaStream): Deleted. (WebCore::MediaStream::registry): Deleted. (WebCore::MediaStream::addObserver): Deleted. (WebCore::MediaStream::removeObserver): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStream.idl: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::id): (WebCore::MediaStreamTrack::label): (WebCore::MediaStreamTrack::enabled): (WebCore::MediaStreamTrack::setEnabled): (WebCore::MediaStreamTrack::muted): (WebCore::MediaStreamTrack::readonly): (WebCore::MediaStreamTrack::remote): (WebCore::MediaStreamTrack::readyState): (WebCore::MediaStreamTrack::ended): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::getCapabilities): (WebCore::MediaStreamTrack::applyConstraints): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::stop): (WebCore::MediaStreamTrack::getConstraints): Deleted. (WebCore::MediaStreamTrack::addObserver): Deleted. (WebCore::MediaStreamTrack::removeObserver): Deleted. (WebCore::MediaStreamTrack::configureTrackRendering): Deleted. (WebCore::MediaStreamTrack::activeDOMObjectName): Deleted. (WebCore::MediaStreamTrack::canSuspendForPageCache): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: * Modules/mediastream/RTCPeerConnection.cpp: (WebCore::RTCPeerConnection::didRemoveRemoteStream): Deleted. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::didCreateStream): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::updateActiveState): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivate::active): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::type): (WebCore::MediaStreamTrackPrivate::applyConstraints): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::muted): Deleted. (WebCore::MediaStreamTrackPrivate::readonly): Deleted. (WebCore::MediaStreamTrackPrivate::remote): Deleted. (WebCore::MediaStreamTrackPrivate::constraints): Deleted. (WebCore::MediaStreamTrackPrivate::states): Deleted. (WebCore::MediaStreamTrackPrivate::capabilities): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::id): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::enabled): (WebCore::MediaStreamTrackPrivate::setClient): (WebCore::MediaStreamTrackPrivate::source): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::readonly): (WebCore::RealtimeMediaSource::stop): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::addObserver): Deleted. (WebCore::RealtimeMediaSource::removeObserver): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::stopped): (WebCore::RealtimeMediaSource::id): Deleted. (WebCore::RealtimeMediaSource::muted): Deleted. (WebCore::RealtimeMediaSource::setReadonly): Deleted. * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream): Deleted. * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): Deleted. LayoutTests: Test status: 3 added, 8 existing enabled (some updated) and 1 removed. * TestExpectations: * fast/mediastream/MediaStream-add-ended-tracks-expected.txt: * fast/mediastream/MediaStream-add-ended-tracks.html: * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: * fast/mediastream/MediaStream-add-remove-tracks.html: * fast/mediastream/MediaStream-add-tracks-to-inactive-stream.html: * fast/mediastream/MediaStream-clone-expected.txt: Added. * fast/mediastream/MediaStream-clone.html: * fast/mediastream/MediaStream-construct-with-ended-tracks-expected.txt: Added. * fast/mediastream/MediaStream-construct-with-ended-tracks.html: * fast/mediastream/MediaStream-getTracks-expected.txt: * fast/mediastream/MediaStream-getTracks.html: * fast/mediastream/MediaStreamConstructor.html: * fast/mediastream/MediaStreamTrack-clone-expected.txt: Added. * fast/mediastream/MediaStreamTrack-clone.html: Added. * fast/mediastream/MediaStreamTrack-getSources-expected.txt: Removed. * fast/mediastream/MediaStreamTrack-getSources.html: Removed. Tested method removed from spec. * fast/mediastream/MediaStreamTrack-kind-expected.txt: Added. * fast/mediastream/MediaStreamTrack-kind.html: Added. * fast/mediastream/MediaStreamTrack-stop-expected.txt: Added. * fast/mediastream/MediaStreamTrack-stop.html: Added. * fast/mediastream/MediaStreamTrackEvent-constructor-expected.txt: * fast/mediastream/MediaStreamTrackEvent-constructor.html: * fast/mediastream/resources/getUserMedia-helper.js: Added. (.reject): (getUserMedia): (defaultRejectOrCatch): * platform/gtk/TestExpectations: Canonical link: https://commits.webkit.org/164511@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@186081 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-06-29 19:52:21 +00:00
m_isEnded = true;
[MediaStream] Move paintCurrentFrameInContext from RealtimeMediaSources to MediaPlayer https://bugs.webkit.org/show_bug.cgi?id=169474 <rdar://problem/30976747> Reviewed by Youenn Fablet. Source/WebCore: Every video capture source has extremely similar code to render the current frame to a graphics context. Because the media player gets every video sample buffer, have it hang onto the most recent frame so it can implement paintCurrentFrameInContext directly. Fix an existing race condition that occasionally caused the readyState to advance to "have enough data" before a video was ready to paint by defining a MediaStreamTrackPrivate readyState and observing that. No new tests, covered by existing tests. These changes uncovered a bug in fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled.html, which was updated. * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp: (WebCore::CanvasCaptureMediaStreamTrack::Source::captureCanvas): (WebCore::CanvasCaptureMediaStreamTrack::Source::paintCurrentFrameInContext): Deleted. (WebCore::CanvasCaptureMediaStreamTrack::Source::currentFrameImage): Deleted. * Modules/mediastream/CanvasCaptureMediaStreamTrack.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]): Drive-by change - don't pass status to parent callback, it is a property of the layer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable): Drive-by cleanup - we don't use AVSampleBufferRenderSynchronizer so don't fail if it isn't available. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample): Hang onto new frame, invalidate cached image, update readyState. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::layerStatusDidChange): No more "updatePausedImage". (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer): Drive-by cleanup - Add an early return if there is no need for a layer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayer): renderingModeChanged -> updateRenderingMode. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Minor cleanup. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode): Renamed from renderingModeChanged, add a bool return to signal when the mode changes. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): No more m_haveEverPlayed. Update display mode immediately. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): No more paused image. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): Only return HaveNothing, HaveMetadata, or HaveEnoughData. Don't return HaveEnoughData until all enabled tracks are providing data and never drop back to HaveMetadata. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateRenderingMode): Renamed from renderingModeChanged. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged): Update intrinsic size directly. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated): No more m_hasReceivedMedia. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::readyStateChanged): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack): Reset imagePainter when active video track changes. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateCurrentFrameImage): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext): Paint current frame image. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::CurrentFramePainter::reset): New. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::shouldEnqueueVideoSampleBuffer): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updatePausedImage): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateIntrinsicSize): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::renderingModeChanged): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::audioSamplesAvailable): Deleted. * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::paintCurrentFrameInContext): Deleted. (WebCore::MediaStreamPrivate::currentFrameImage): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::endTrack): Update readyState. (WebCore::MediaStreamTrackPrivate::clone): Clone readyState. (WebCore::MediaStreamTrackPrivate::sourceStopped): Update readyState. (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): Ditto. (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): Ditto. (WebCore::MediaStreamTrackPrivate::updateReadyState): New, update readyState and notify observers. (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::currentFrameImage): Deleted. (WebCore::RealtimeMediaSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/AVMediaCaptureSource.mm: (-[WebCoreAVMediaCaptureSourceObserver disconnect]): Drive-by fix - clear m_callback after calling removeNotificationObservers. (-[WebCoreAVMediaCaptureSourceObserver removeNotificationObservers]): Drive-by fix - remove the correct listener. (-[WebCoreAVMediaCaptureSourceObserver endSessionInterrupted:]): * platform/mediastream/mac/AVVideoCaptureSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::currentFrameImage): Deleted. (WebCore::AVVideoCaptureSource::currentFrameCGImage): Deleted. (WebCore::AVVideoCaptureSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp: (WebCore::drawImage): Deleted. (WebCore::RealtimeIncomingVideoSource::currentFrameImage): Deleted. (WebCore::RealtimeIncomingVideoSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/RealtimeIncomingVideoSource.h: * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::paintCurrentFrameInContext): Deleted. (WebCore::MockRealtimeVideoSource::currentFrameImage): Deleted. * platform/mock/MockRealtimeVideoSource.h: LayoutTests: * fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled-expected.txt: * fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled.html: Fix bug uncovered by patch. Canonical link: https://commits.webkit.org/186577@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213880 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-14 00:30:48 +00:00
updateReadyState();
[MediaStream] VideoTrack should respond to MediaStreamTrack state changes https://bugs.webkit.org/show_bug.cgi?id=151299 Reviewed by Jer Noble. Source/WebCore: Test: fast/mediastream/MediaStream-video-element-track-stop.html * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::ended): Check m_ended. (WebCore::MediaStreamTrack::stopProducingData): Set m_ended before telling private track to stop so we won't fire an 'ended' event. (WebCore::MediaStreamTrack::trackEnded): Set m_ended, add comments from spec. * Modules/mediastream/MediaStreamTrack.h: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Live streams have infinite duration, not indefinite. * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformLayer): Return NULL when displayMode is None. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Calculate current displayMode based on MediaStream state. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode): Renamed from setPausedImageVisible, use m_displayMode. Don't start/stop clock, it makes more sense to do that in play and pause. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): Start clock. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): Stop clock. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): Call updateDisplayMode. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::activeStatusChanged): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateIntrinsicSize): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::createPreviewLayers): Always try to create both layers if necessary. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::renderingModeChanged): New, update displayMode and call back to the media element. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): Get rid of some unused locals. React to a change in the enabled video track. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext): Paint black when the active video track is disabled. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setPausedImageVisible): Deleted. * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::updateActiveState): Split the logic of updating the active video track out into updateActiveVideoTrack. (WebCore::MediaStreamPrivate::hasVideo): Check for track.ended. (WebCore::MediaStreamPrivate::hasAudio): Ditto. (WebCore::MediaStreamPrivate::paintCurrentFrameInContext): Don't call the source directly. (WebCore::MediaStreamPrivate::updateActiveVideoTrack): New. (WebCore::MediaStreamPrivate::trackEnabledChanged): Call updateActiveVideoTrack. (WebCore::MediaStreamPrivate::trackEnded): new. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::setEnabled): Call observers if enabled state changes. (WebCore::MediaStreamTrackPrivate::endTrack): Call observers. (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): New. (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): Add comments. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::paintCurrentFrameInContext): Remove a commented-out line. LayoutTests: * fast/mediastream/MediaStream-video-element-expected.txt: * fast/mediastream/MediaStream-video-element-track-stop-expected.txt: Added. * fast/mediastream/MediaStream-video-element-track-stop.html: Added. * fast/mediastream/MediaStream-video-element.html: * platform/gtk/TestExpectations: Skip new test. * platform/ios-simulator/TestExpectations: Ditto. * platform/mac-wk2/TestExpectations: Ditto. * platform/win/TestExpectations: Ditto. Canonical link: https://commits.webkit.org/169494@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@192503 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-11-17 02:52:16 +00:00
Make to clear sources from UserMediaCaptureManagerProxy and UserMediaCaptureManager when no longer needed https://bugs.webkit.org/show_bug.cgi?id=194312 Reviewed by Eric Carlson. Source/WebCore: Add a way for sources to know when they are ended, i.e. that they will never be started again. No observable change of behavior. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::requestStop): * platform/mediastream/RealtimeMediaSource.h: Source/WebKit: Sources in UserMediaCaptureManager and Proxy are never removed once added to their HashMap. Use the 'ended' mechanism to do the clean-up on WebProcess side. As part of this clean-up, send IPC to UIProcess to do clean-up on proxy side. On WebProcess crash case, clean-up the proxy as well. * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints): (WebKit::UserMediaCaptureManagerProxy::end): (WebKit::UserMediaCaptureManagerProxy::clear): * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h: * UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in: * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch): * WebProcess/cocoa/UserMediaCaptureManager.cpp: (WebKit::UserMediaCaptureManager::sourceEnded): * WebProcess/cocoa/UserMediaCaptureManager.h: Canonical link: https://commits.webkit.org/208822@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241132 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-02-07 19:20:15 +00:00
m_source->requestToEnd(*this);
[MediaStream] VideoTrack should respond to MediaStreamTrack state changes https://bugs.webkit.org/show_bug.cgi?id=151299 Reviewed by Jer Noble. Source/WebCore: Test: fast/mediastream/MediaStream-video-element-track-stop.html * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::ended): Check m_ended. (WebCore::MediaStreamTrack::stopProducingData): Set m_ended before telling private track to stop so we won't fire an 'ended' event. (WebCore::MediaStreamTrack::trackEnded): Set m_ended, add comments from spec. * Modules/mediastream/MediaStreamTrack.h: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Live streams have infinite duration, not indefinite. * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformLayer): Return NULL when displayMode is None. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Calculate current displayMode based on MediaStream state. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode): Renamed from setPausedImageVisible, use m_displayMode. Don't start/stop clock, it makes more sense to do that in play and pause. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): Start clock. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): Stop clock. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): Call updateDisplayMode. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::activeStatusChanged): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateIntrinsicSize): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::createPreviewLayers): Always try to create both layers if necessary. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::renderingModeChanged): New, update displayMode and call back to the media element. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): Get rid of some unused locals. React to a change in the enabled video track. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext): Paint black when the active video track is disabled. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setPausedImageVisible): Deleted. * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::updateActiveState): Split the logic of updating the active video track out into updateActiveVideoTrack. (WebCore::MediaStreamPrivate::hasVideo): Check for track.ended. (WebCore::MediaStreamPrivate::hasAudio): Ditto. (WebCore::MediaStreamPrivate::paintCurrentFrameInContext): Don't call the source directly. (WebCore::MediaStreamPrivate::updateActiveVideoTrack): New. (WebCore::MediaStreamPrivate::trackEnabledChanged): Call updateActiveVideoTrack. (WebCore::MediaStreamPrivate::trackEnded): new. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::setEnabled): Call observers if enabled state changes. (WebCore::MediaStreamTrackPrivate::endTrack): Call observers. (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): New. (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): Add comments. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::paintCurrentFrameInContext): Remove a commented-out line. LayoutTests: * fast/mediastream/MediaStream-video-element-expected.txt: * fast/mediastream/MediaStream-video-element-track-stop-expected.txt: Added. * fast/mediastream/MediaStream-video-element-track-stop.html: Added. * fast/mediastream/MediaStream-video-element.html: * platform/gtk/TestExpectations: Skip new test. * platform/ios-simulator/TestExpectations: Ditto. * platform/mac-wk2/TestExpectations: Ditto. * platform/win/TestExpectations: Ditto. Canonical link: https://commits.webkit.org/169494@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@192503 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-11-17 02:52:16 +00:00
Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable() https://bugs.webkit.org/show_bug.cgi?id=188097 <rdar://problem/42558823> Reviewed by Eric Carlson. Source/WebCore: Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable(). RealtimeMediaSource::audioSamplesAvailable() is called on a background thread but iterates over observers that may get destroyed concurrently on the main thread. To address the issue: - Introduce a Lock to protect m_observer accesses - Copy observers to a Vector before iterating over them * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::forEachObserver const): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::sampleBufferUpdated): (WebCore::MediaStreamTrackPrivate::Observer::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addObserver): (WebCore::RealtimeMediaSource::removeObserver): (WebCore::RealtimeMediaSource::forEachObserver const): (WebCore::RealtimeMediaSource::notifyMutedObservers const): (WebCore::RealtimeMediaSource::settingsDidChange): (WebCore::RealtimeMediaSource::videoSampleAvailable): (WebCore::RealtimeMediaSource::audioSamplesAvailable): (WebCore::RealtimeMediaSource::start): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::captureFailed): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp: (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable): * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: Source/WebKit: * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: Canonical link: https://commits.webkit.org/203253@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234334 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-07-27 22:33:52 +00:00
forEachObserver([this](auto& observer) {
observer.trackEnded(*this);
});
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
}
MediaStreamTrack should use more Ref<> and less RefPtr<> https://bugs.webkit.org/show_bug.cgi?id=164560 Patch by Youenn Fablet <youennf@gmail.com> on 2016-11-10 Reviewed by Eric Carlson. No change of behavior. Make MediaStreamTrack take a Ref<>& instead of a reference. Using Ref<>&& instead of RefPtr<>&& in MediaStreamTrackPrivate. Updating constness of some methods accordingly. * Modules/mediastream/MediaEndpointPeerConnection.cpp: (WebCore::MediaEndpointPeerConnection::createReceiver): * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::create): (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::clone): * Modules/mediastream/MediaStreamTrack.h: * Modules/webaudio/MediaStreamAudioSource.cpp: (WebCore::MediaStreamAudioSource::capabilities): (WebCore::MediaStreamAudioSource::settings): * Modules/webaudio/MediaStreamAudioSource.h: * platform/mediastream/MediaEndpoint.cpp: * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::clone): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::setMuted): (WebCore::MediaStreamTrackPrivate::source): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AVMediaCaptureSource.h: * platform/mediastream/mac/AVMediaCaptureSource.mm: (WebCore::AVMediaCaptureSource::initializeSettings): (WebCore::AVMediaCaptureSource::settings): (WebCore::AVMediaCaptureSource::initializeCapabilities): (WebCore::AVMediaCaptureSource::capabilities): * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h: (WebCore::RealtimeMediaSourceOwr::capabilities): (WebCore::RealtimeMediaSourceOwr::settings): * platform/mock/MockRealtimeMediaSource.cpp: (WebCore::MockRealtimeMediaSource::initializeCapabilities): (WebCore::MockRealtimeMediaSource::capabilities): (WebCore::MockRealtimeMediaSource::initializeSettings): (WebCore::MockRealtimeMediaSource::settings): * platform/mock/MockRealtimeMediaSource.h: Canonical link: https://commits.webkit.org/182267@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@208542 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-11-10 17:26:22 +00:00
Ref<MediaStreamTrackPrivate> MediaStreamTrackPrivate::clone()
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
{
Changing settings of a MediaStreamTrack clone should not alter the settings of the original track https://bugs.webkit.org/show_bug.cgi?id=198840 Reviewed by Eric Carlson. Source/WebCore: Rename RealtimeVideoSource in RealtimeVideoCaptureSource. Introduce RealtimeVideoSource as a class wrapping RealtimeVideoCaptureSource. Its goal is to be able to have independent settings from its underlying RealtimeVideoCaptureSource. It can also adapt size based on its settings if different than its RealtimeVideoCaptureSource. Apply this wrapping for AV video sources as well as mock video sources. Test: fast/mediastream/mediastreamtrack-video-clone.html * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::clone): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/RealtimeVideoCaptureSource.cpp: Added. (WebCore::RealtimeVideoCaptureSource::RealtimeVideoCaptureSource): (WebCore::RealtimeVideoCaptureSource::~RealtimeVideoCaptureSource): (WebCore::RealtimeVideoCaptureSource::prepareToProduceData): (WebCore::RealtimeVideoCaptureSource::presets): (WebCore::RealtimeVideoCaptureSource::setSupportedPresets): (WebCore::RealtimeVideoCaptureSource::standardVideoSizes): (WebCore::updateMinMax): (WebCore::RealtimeVideoCaptureSource::updateCapabilities): (WebCore::RealtimeVideoCaptureSource::supportsSizeAndFrameRate): (WebCore::RealtimeVideoCaptureSource::frameRateRangeIncludesRate): (WebCore::RealtimeVideoCaptureSource::presetSupportsFrameRate): (WebCore::RealtimeVideoCaptureSource::supportsCaptureSize): (WebCore::RealtimeVideoCaptureSource::shouldUsePreset): (WebCore::RealtimeVideoCaptureSource::bestSupportedSizeAndFrameRate): (WebCore::RealtimeVideoCaptureSource::setSizeAndFrameRate): (WebCore::RealtimeVideoCaptureSource::adaptVideoSample): (WebCore::RealtimeVideoCaptureSource::dispatchMediaSampleToObservers): (WebCore::RealtimeVideoCaptureSource::clientUpdatedSizeAndFrameRate): (WebCore::SizeAndFrameRate::toJSONObject const): (WebCore::SizeAndFrameRate::toJSONString const): * platform/mediastream/RealtimeVideoCaptureSource.h: Added. (WebCore::RealtimeVideoCaptureSource::sampleRotation const): (WebCore::RealtimeVideoCaptureSource::prefersPreset): (WebCore::RealtimeVideoCaptureSource::setFrameRateWithPreset): (WebCore::RealtimeVideoCaptureSource::canResizeVideoFrames const): (WebCore::RealtimeVideoCaptureSource::setDefaultSize): (WebCore::RealtimeVideoCaptureSource::observedFrameRate const): (WTF::LogArgument<WebCore::SizeAndFrameRate>::toString): * platform/mediastream/RealtimeVideoSource.cpp: (WebCore::RealtimeVideoSource::RealtimeVideoSource): (WebCore::m_source): (WebCore::RealtimeVideoSource::~RealtimeVideoSource): (WebCore::RealtimeVideoSource::startProducingData): (WebCore::RealtimeVideoSource::stopProducingData): (WebCore::RealtimeVideoSource::supportsSizeAndFrameRate): (WebCore::RealtimeVideoSource::setSizeAndFrameRate): (WebCore::RealtimeVideoSource::sourceMutedChanged): (WebCore::RealtimeVideoSource::sourceSettingsChanged): (WebCore::RealtimeVideoSource::preventSourceFromStopping): (WebCore::RealtimeVideoSource::sourceStopped): (WebCore::RealtimeVideoSource::videoSampleAvailable): (WebCore::RealtimeVideoSource::clone): * platform/mediastream/RealtimeVideoSource.h: * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp: (WebCore::GStreamerVideoCaptureSource::GStreamerVideoCaptureSource): * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h: * platform/mediastream/mac/AVVideoCaptureSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::create): (WebCore::AVVideoCaptureSource::AVVideoCaptureSource): * platform/mediastream/mac/MockRealtimeVideoSourceMac.h: * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm: (WebCore::MockRealtimeVideoSource::create): * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::create): (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource): (WebCore::MockRealtimeVideoSource::supportsSizeAndFrameRate): (WebCore::MockRealtimeVideoSource::setSizeAndFrameRate): * platform/mock/MockRealtimeVideoSource.h: LayoutTests: * fast/mediastream/mediastreamtrack-video-clone-expected.txt: Added. * fast/mediastream/mediastreamtrack-video-clone.html: Added. Canonical link: https://commits.webkit.org/213034@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246644 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-06-20 18:55:32 +00:00
auto clonedMediaStreamTrackPrivate = create(m_logger.copyRef(), m_source->clone());
Cloning a MediaStreamTrack does not clone the logger https://bugs.webkit.org/show_bug.cgi?id=198844 Reviewed by Eric Carlson. Source/WebCore: Make MediaStream and MediaStreamTrack rely on their private versions for logging. Move from a RefPtr version to a Ref so as to forbid nullptr crashes. Make sure that RealtimeIncomingAudioSource and RealtimeIncomingVideoSource check for their logger before logging. Covered by existing tests and updated test. * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp: (WebCore::loggerFromContext): (WebCore::CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack): * Modules/mediastream/MediaStream.cpp: (WebCore::loggerFromContext): (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::allow): * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: (WebCore::LibWebRTCMediaEndpoint::mediaStreamFromRTCStream): * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: (WebCore::LibWebRTCPeerConnectionBackend::createReceiverForSource): * Modules/webaudio/MediaStreamAudioDestinationNode.cpp: (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::setLogger): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::setLogger): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSourceCenter.cpp: (WebCore::RealtimeMediaSourceCenter::createMediaStream): * platform/mediastream/RealtimeMediaSourceCenter.h: * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp: (WebCore::RealtimeIncomingAudioSourceCocoa::OnData): * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm: (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferPool): (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferFromVideoFrame): (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame): LayoutTests: * fast/mediastream/MediaStreamTrack-clone-expected.txt: * fast/mediastream/MediaStreamTrack-clone.html: Canonical link: https://commits.webkit.org/212833@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246436 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-06-14 17:14:47 +00:00
Add more MediaStream logging https://bugs.webkit.org/show_bug.cgi?id=223143 <rdar://problem/75380363> Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopTrack): (WebCore::MediaStreamTrack::trackStarted): (WebCore::MediaStreamTrack::trackEnded): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::createAudioSourceProvider): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::end): * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource): (WebCore::AVVideoCaptureSource::startProducingData): (WebCore::AVVideoCaptureSource::stopProducingData): (WebCore::AVVideoCaptureSource::shutdownCaptureSession): (WebCore::AVVideoCaptureSource::orientationChanged): Canonical link: https://commits.webkit.org/235243@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@274376 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-03-13 02:01:11 +00:00
ALWAYS_LOG(LOGIDENTIFIER, clonedMediaStreamTrackPrivate->logIdentifier());
clonedMediaStreamTrackPrivate->m_isEnabled = this->m_isEnabled;
clonedMediaStreamTrackPrivate->m_isEnded = this->m_isEnded;
clonedMediaStreamTrackPrivate->m_contentHint = this->m_contentHint;
[MediaStream] Move paintCurrentFrameInContext from RealtimeMediaSources to MediaPlayer https://bugs.webkit.org/show_bug.cgi?id=169474 <rdar://problem/30976747> Reviewed by Youenn Fablet. Source/WebCore: Every video capture source has extremely similar code to render the current frame to a graphics context. Because the media player gets every video sample buffer, have it hang onto the most recent frame so it can implement paintCurrentFrameInContext directly. Fix an existing race condition that occasionally caused the readyState to advance to "have enough data" before a video was ready to paint by defining a MediaStreamTrackPrivate readyState and observing that. No new tests, covered by existing tests. These changes uncovered a bug in fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled.html, which was updated. * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp: (WebCore::CanvasCaptureMediaStreamTrack::Source::captureCanvas): (WebCore::CanvasCaptureMediaStreamTrack::Source::paintCurrentFrameInContext): Deleted. (WebCore::CanvasCaptureMediaStreamTrack::Source::currentFrameImage): Deleted. * Modules/mediastream/CanvasCaptureMediaStreamTrack.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]): Drive-by change - don't pass status to parent callback, it is a property of the layer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable): Drive-by cleanup - we don't use AVSampleBufferRenderSynchronizer so don't fail if it isn't available. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample): Hang onto new frame, invalidate cached image, update readyState. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::layerStatusDidChange): No more "updatePausedImage". (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer): Drive-by cleanup - Add an early return if there is no need for a layer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayer): renderingModeChanged -> updateRenderingMode. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Minor cleanup. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode): Renamed from renderingModeChanged, add a bool return to signal when the mode changes. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): No more m_haveEverPlayed. Update display mode immediately. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): No more paused image. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): Only return HaveNothing, HaveMetadata, or HaveEnoughData. Don't return HaveEnoughData until all enabled tracks are providing data and never drop back to HaveMetadata. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateRenderingMode): Renamed from renderingModeChanged. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged): Update intrinsic size directly. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated): No more m_hasReceivedMedia. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::readyStateChanged): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack): Reset imagePainter when active video track changes. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateCurrentFrameImage): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext): Paint current frame image. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::CurrentFramePainter::reset): New. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::shouldEnqueueVideoSampleBuffer): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updatePausedImage): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateIntrinsicSize): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::renderingModeChanged): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::audioSamplesAvailable): Deleted. * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::paintCurrentFrameInContext): Deleted. (WebCore::MediaStreamPrivate::currentFrameImage): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::endTrack): Update readyState. (WebCore::MediaStreamTrackPrivate::clone): Clone readyState. (WebCore::MediaStreamTrackPrivate::sourceStopped): Update readyState. (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): Ditto. (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): Ditto. (WebCore::MediaStreamTrackPrivate::updateReadyState): New, update readyState and notify observers. (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::currentFrameImage): Deleted. (WebCore::RealtimeMediaSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/AVMediaCaptureSource.mm: (-[WebCoreAVMediaCaptureSourceObserver disconnect]): Drive-by fix - clear m_callback after calling removeNotificationObservers. (-[WebCoreAVMediaCaptureSourceObserver removeNotificationObservers]): Drive-by fix - remove the correct listener. (-[WebCoreAVMediaCaptureSourceObserver endSessionInterrupted:]): * platform/mediastream/mac/AVVideoCaptureSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::currentFrameImage): Deleted. (WebCore::AVVideoCaptureSource::currentFrameCGImage): Deleted. (WebCore::AVVideoCaptureSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp: (WebCore::drawImage): Deleted. (WebCore::RealtimeIncomingVideoSource::currentFrameImage): Deleted. (WebCore::RealtimeIncomingVideoSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/RealtimeIncomingVideoSource.h: * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::paintCurrentFrameInContext): Deleted. (WebCore::MockRealtimeVideoSource::currentFrameImage): Deleted. * platform/mock/MockRealtimeVideoSource.h: LayoutTests: * fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled-expected.txt: * fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled.html: Fix bug uncovered by patch. Canonical link: https://commits.webkit.org/186577@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213880 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-14 00:30:48 +00:00
clonedMediaStreamTrackPrivate->updateReadyState();
Changing settings of a MediaStreamTrack clone should not alter the settings of the original track https://bugs.webkit.org/show_bug.cgi?id=198840 Reviewed by Eric Carlson. Source/WebCore: Rename RealtimeVideoSource in RealtimeVideoCaptureSource. Introduce RealtimeVideoSource as a class wrapping RealtimeVideoCaptureSource. Its goal is to be able to have independent settings from its underlying RealtimeVideoCaptureSource. It can also adapt size based on its settings if different than its RealtimeVideoCaptureSource. Apply this wrapping for AV video sources as well as mock video sources. Test: fast/mediastream/mediastreamtrack-video-clone.html * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::clone): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/RealtimeVideoCaptureSource.cpp: Added. (WebCore::RealtimeVideoCaptureSource::RealtimeVideoCaptureSource): (WebCore::RealtimeVideoCaptureSource::~RealtimeVideoCaptureSource): (WebCore::RealtimeVideoCaptureSource::prepareToProduceData): (WebCore::RealtimeVideoCaptureSource::presets): (WebCore::RealtimeVideoCaptureSource::setSupportedPresets): (WebCore::RealtimeVideoCaptureSource::standardVideoSizes): (WebCore::updateMinMax): (WebCore::RealtimeVideoCaptureSource::updateCapabilities): (WebCore::RealtimeVideoCaptureSource::supportsSizeAndFrameRate): (WebCore::RealtimeVideoCaptureSource::frameRateRangeIncludesRate): (WebCore::RealtimeVideoCaptureSource::presetSupportsFrameRate): (WebCore::RealtimeVideoCaptureSource::supportsCaptureSize): (WebCore::RealtimeVideoCaptureSource::shouldUsePreset): (WebCore::RealtimeVideoCaptureSource::bestSupportedSizeAndFrameRate): (WebCore::RealtimeVideoCaptureSource::setSizeAndFrameRate): (WebCore::RealtimeVideoCaptureSource::adaptVideoSample): (WebCore::RealtimeVideoCaptureSource::dispatchMediaSampleToObservers): (WebCore::RealtimeVideoCaptureSource::clientUpdatedSizeAndFrameRate): (WebCore::SizeAndFrameRate::toJSONObject const): (WebCore::SizeAndFrameRate::toJSONString const): * platform/mediastream/RealtimeVideoCaptureSource.h: Added. (WebCore::RealtimeVideoCaptureSource::sampleRotation const): (WebCore::RealtimeVideoCaptureSource::prefersPreset): (WebCore::RealtimeVideoCaptureSource::setFrameRateWithPreset): (WebCore::RealtimeVideoCaptureSource::canResizeVideoFrames const): (WebCore::RealtimeVideoCaptureSource::setDefaultSize): (WebCore::RealtimeVideoCaptureSource::observedFrameRate const): (WTF::LogArgument<WebCore::SizeAndFrameRate>::toString): * platform/mediastream/RealtimeVideoSource.cpp: (WebCore::RealtimeVideoSource::RealtimeVideoSource): (WebCore::m_source): (WebCore::RealtimeVideoSource::~RealtimeVideoSource): (WebCore::RealtimeVideoSource::startProducingData): (WebCore::RealtimeVideoSource::stopProducingData): (WebCore::RealtimeVideoSource::supportsSizeAndFrameRate): (WebCore::RealtimeVideoSource::setSizeAndFrameRate): (WebCore::RealtimeVideoSource::sourceMutedChanged): (WebCore::RealtimeVideoSource::sourceSettingsChanged): (WebCore::RealtimeVideoSource::preventSourceFromStopping): (WebCore::RealtimeVideoSource::sourceStopped): (WebCore::RealtimeVideoSource::videoSampleAvailable): (WebCore::RealtimeVideoSource::clone): * platform/mediastream/RealtimeVideoSource.h: * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp: (WebCore::GStreamerVideoCaptureSource::GStreamerVideoCaptureSource): * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h: * platform/mediastream/mac/AVVideoCaptureSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::create): (WebCore::AVVideoCaptureSource::AVVideoCaptureSource): * platform/mediastream/mac/MockRealtimeVideoSourceMac.h: * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm: (WebCore::MockRealtimeVideoSource::create): * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::create): (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource): (WebCore::MockRealtimeVideoSource::supportsSizeAndFrameRate): (WebCore::MockRealtimeVideoSource::setSizeAndFrameRate): * platform/mock/MockRealtimeVideoSource.h: LayoutTests: * fast/mediastream/mediastreamtrack-video-clone-expected.txt: Added. * fast/mediastream/mediastreamtrack-video-clone.html: Added. Canonical link: https://commits.webkit.org/213034@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246644 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-06-20 18:55:32 +00:00
if (isProducingData())
clonedMediaStreamTrackPrivate->startProducingData();
return clonedMediaStreamTrackPrivate;
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
}
WebRTC: Update the MediaStream API https://bugs.webkit.org/show_bug.cgi?id=146313 Reviewed by Eric Carlson. Source/WebCore: Update the MediaStream API (MediaStream, MediaStreamTrack and RealtimeMediaSource) to match the Media Capture and Stream specification [1]. Notable changes: Updated event handling to synchronously update corresponding state/attributes as events are dispatched. Removed 'new' state from MediaStreamTrack. A track is either 'live' or 'ended'. As a consequence 'started' event is also removed. MediaStreamTrack always has a source (disconnected source concept was removed from the spec). Therefore, more state can be kept at the source without going away. Calculate MediaStream.active internally, from the track set, instead of setting it externally. Updated RealtimeMediaSource Observer interface. Replaced MediaStream's separate audio and video track lists with a single track set (more aligned with spec). Updated MediaStream constructor to adopt instead of clone track arguments (or tracks from MediaStream argument). Removed MediaStreamTrack.getSources() and corresponding test (removed from spec). Test status: 3 added, 8 existing enabled (some updated) and 1 removed. [1] http://w3c.github.io/mediacapture-main/archives/20150523/getusermedia.html Tests: fast/mediastream/MediaStreamTrack-clone.html fast/mediastream/MediaStreamTrack-kind.html fast/mediastream/MediaStreamTrack-stop.html * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::contextDestroyed): (WebCore::MediaStream::trackDidEnd): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrackToPrivate): (WebCore::MediaStream::didRemoveTrackFromPrivate): (WebCore::MediaStream::internalAddTrack): (WebCore::MediaStream::internalRemoveTrack): (WebCore::MediaStream::scheduleActiveStateChange): (WebCore::MediaStream::activityEventTimerFired): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::~MediaStream): Deleted. (WebCore::MediaStream::registry): Deleted. (WebCore::MediaStream::addObserver): Deleted. (WebCore::MediaStream::removeObserver): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStream.idl: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::id): (WebCore::MediaStreamTrack::label): (WebCore::MediaStreamTrack::enabled): (WebCore::MediaStreamTrack::setEnabled): (WebCore::MediaStreamTrack::muted): (WebCore::MediaStreamTrack::readonly): (WebCore::MediaStreamTrack::remote): (WebCore::MediaStreamTrack::readyState): (WebCore::MediaStreamTrack::ended): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::getCapabilities): (WebCore::MediaStreamTrack::applyConstraints): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::stop): (WebCore::MediaStreamTrack::getConstraints): Deleted. (WebCore::MediaStreamTrack::addObserver): Deleted. (WebCore::MediaStreamTrack::removeObserver): Deleted. (WebCore::MediaStreamTrack::configureTrackRendering): Deleted. (WebCore::MediaStreamTrack::activeDOMObjectName): Deleted. (WebCore::MediaStreamTrack::canSuspendForPageCache): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: * Modules/mediastream/RTCPeerConnection.cpp: (WebCore::RTCPeerConnection::didRemoveRemoteStream): Deleted. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::didCreateStream): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::updateActiveState): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivate::active): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::type): (WebCore::MediaStreamTrackPrivate::applyConstraints): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::muted): Deleted. (WebCore::MediaStreamTrackPrivate::readonly): Deleted. (WebCore::MediaStreamTrackPrivate::remote): Deleted. (WebCore::MediaStreamTrackPrivate::constraints): Deleted. (WebCore::MediaStreamTrackPrivate::states): Deleted. (WebCore::MediaStreamTrackPrivate::capabilities): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::id): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::enabled): (WebCore::MediaStreamTrackPrivate::setClient): (WebCore::MediaStreamTrackPrivate::source): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::readonly): (WebCore::RealtimeMediaSource::stop): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::addObserver): Deleted. (WebCore::RealtimeMediaSource::removeObserver): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::stopped): (WebCore::RealtimeMediaSource::id): Deleted. (WebCore::RealtimeMediaSource::muted): Deleted. (WebCore::RealtimeMediaSource::setReadonly): Deleted. * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream): Deleted. * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): Deleted. LayoutTests: Test status: 3 added, 8 existing enabled (some updated) and 1 removed. * TestExpectations: * fast/mediastream/MediaStream-add-ended-tracks-expected.txt: * fast/mediastream/MediaStream-add-ended-tracks.html: * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: * fast/mediastream/MediaStream-add-remove-tracks.html: * fast/mediastream/MediaStream-add-tracks-to-inactive-stream.html: * fast/mediastream/MediaStream-clone-expected.txt: Added. * fast/mediastream/MediaStream-clone.html: * fast/mediastream/MediaStream-construct-with-ended-tracks-expected.txt: Added. * fast/mediastream/MediaStream-construct-with-ended-tracks.html: * fast/mediastream/MediaStream-getTracks-expected.txt: * fast/mediastream/MediaStream-getTracks.html: * fast/mediastream/MediaStreamConstructor.html: * fast/mediastream/MediaStreamTrack-clone-expected.txt: Added. * fast/mediastream/MediaStreamTrack-clone.html: Added. * fast/mediastream/MediaStreamTrack-getSources-expected.txt: Removed. * fast/mediastream/MediaStreamTrack-getSources.html: Removed. Tested method removed from spec. * fast/mediastream/MediaStreamTrack-kind-expected.txt: Added. * fast/mediastream/MediaStreamTrack-kind.html: Added. * fast/mediastream/MediaStreamTrack-stop-expected.txt: Added. * fast/mediastream/MediaStreamTrack-stop.html: Added. * fast/mediastream/MediaStreamTrackEvent-constructor-expected.txt: * fast/mediastream/MediaStreamTrackEvent-constructor.html: * fast/mediastream/resources/getUserMedia-helper.js: Added. (.reject): (getUserMedia): (defaultRejectOrCatch): * platform/gtk/TestExpectations: Canonical link: https://commits.webkit.org/164511@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@186081 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-06-29 19:52:21 +00:00
RealtimeMediaSource::Type MediaStreamTrackPrivate::type() const
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
{
WebRTC: Update the MediaStream API https://bugs.webkit.org/show_bug.cgi?id=146313 Reviewed by Eric Carlson. Source/WebCore: Update the MediaStream API (MediaStream, MediaStreamTrack and RealtimeMediaSource) to match the Media Capture and Stream specification [1]. Notable changes: Updated event handling to synchronously update corresponding state/attributes as events are dispatched. Removed 'new' state from MediaStreamTrack. A track is either 'live' or 'ended'. As a consequence 'started' event is also removed. MediaStreamTrack always has a source (disconnected source concept was removed from the spec). Therefore, more state can be kept at the source without going away. Calculate MediaStream.active internally, from the track set, instead of setting it externally. Updated RealtimeMediaSource Observer interface. Replaced MediaStream's separate audio and video track lists with a single track set (more aligned with spec). Updated MediaStream constructor to adopt instead of clone track arguments (or tracks from MediaStream argument). Removed MediaStreamTrack.getSources() and corresponding test (removed from spec). Test status: 3 added, 8 existing enabled (some updated) and 1 removed. [1] http://w3c.github.io/mediacapture-main/archives/20150523/getusermedia.html Tests: fast/mediastream/MediaStreamTrack-clone.html fast/mediastream/MediaStreamTrack-kind.html fast/mediastream/MediaStreamTrack-stop.html * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::contextDestroyed): (WebCore::MediaStream::trackDidEnd): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrackToPrivate): (WebCore::MediaStream::didRemoveTrackFromPrivate): (WebCore::MediaStream::internalAddTrack): (WebCore::MediaStream::internalRemoveTrack): (WebCore::MediaStream::scheduleActiveStateChange): (WebCore::MediaStream::activityEventTimerFired): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::~MediaStream): Deleted. (WebCore::MediaStream::registry): Deleted. (WebCore::MediaStream::addObserver): Deleted. (WebCore::MediaStream::removeObserver): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStream.idl: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::id): (WebCore::MediaStreamTrack::label): (WebCore::MediaStreamTrack::enabled): (WebCore::MediaStreamTrack::setEnabled): (WebCore::MediaStreamTrack::muted): (WebCore::MediaStreamTrack::readonly): (WebCore::MediaStreamTrack::remote): (WebCore::MediaStreamTrack::readyState): (WebCore::MediaStreamTrack::ended): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::getCapabilities): (WebCore::MediaStreamTrack::applyConstraints): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::stop): (WebCore::MediaStreamTrack::getConstraints): Deleted. (WebCore::MediaStreamTrack::addObserver): Deleted. (WebCore::MediaStreamTrack::removeObserver): Deleted. (WebCore::MediaStreamTrack::configureTrackRendering): Deleted. (WebCore::MediaStreamTrack::activeDOMObjectName): Deleted. (WebCore::MediaStreamTrack::canSuspendForPageCache): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: * Modules/mediastream/RTCPeerConnection.cpp: (WebCore::RTCPeerConnection::didRemoveRemoteStream): Deleted. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::didCreateStream): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::updateActiveState): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivate::active): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::type): (WebCore::MediaStreamTrackPrivate::applyConstraints): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::muted): Deleted. (WebCore::MediaStreamTrackPrivate::readonly): Deleted. (WebCore::MediaStreamTrackPrivate::remote): Deleted. (WebCore::MediaStreamTrackPrivate::constraints): Deleted. (WebCore::MediaStreamTrackPrivate::states): Deleted. (WebCore::MediaStreamTrackPrivate::capabilities): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::id): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::enabled): (WebCore::MediaStreamTrackPrivate::setClient): (WebCore::MediaStreamTrackPrivate::source): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::readonly): (WebCore::RealtimeMediaSource::stop): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::addObserver): Deleted. (WebCore::RealtimeMediaSource::removeObserver): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::stopped): (WebCore::RealtimeMediaSource::id): Deleted. (WebCore::RealtimeMediaSource::muted): Deleted. (WebCore::RealtimeMediaSource::setReadonly): Deleted. * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream): Deleted. * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): Deleted. LayoutTests: Test status: 3 added, 8 existing enabled (some updated) and 1 removed. * TestExpectations: * fast/mediastream/MediaStream-add-ended-tracks-expected.txt: * fast/mediastream/MediaStream-add-ended-tracks.html: * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: * fast/mediastream/MediaStream-add-remove-tracks.html: * fast/mediastream/MediaStream-add-tracks-to-inactive-stream.html: * fast/mediastream/MediaStream-clone-expected.txt: Added. * fast/mediastream/MediaStream-clone.html: * fast/mediastream/MediaStream-construct-with-ended-tracks-expected.txt: Added. * fast/mediastream/MediaStream-construct-with-ended-tracks.html: * fast/mediastream/MediaStream-getTracks-expected.txt: * fast/mediastream/MediaStream-getTracks.html: * fast/mediastream/MediaStreamConstructor.html: * fast/mediastream/MediaStreamTrack-clone-expected.txt: Added. * fast/mediastream/MediaStreamTrack-clone.html: Added. * fast/mediastream/MediaStreamTrack-getSources-expected.txt: Removed. * fast/mediastream/MediaStreamTrack-getSources.html: Removed. Tested method removed from spec. * fast/mediastream/MediaStreamTrack-kind-expected.txt: Added. * fast/mediastream/MediaStreamTrack-kind.html: Added. * fast/mediastream/MediaStreamTrack-stop-expected.txt: Added. * fast/mediastream/MediaStreamTrack-stop.html: Added. * fast/mediastream/MediaStreamTrackEvent-constructor-expected.txt: * fast/mediastream/MediaStreamTrackEvent-constructor.html: * fast/mediastream/resources/getUserMedia-helper.js: Added. (.reject): (getUserMedia): (defaultRejectOrCatch): * platform/gtk/TestExpectations: Canonical link: https://commits.webkit.org/164511@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@186081 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-06-29 19:52:21 +00:00
return m_source->type();
[Mac MediaStream] implement AVFoundation backed MediaStreamSource https://bugs.webkit.org/show_bug.cgi?id=123316 Source/WebCore: Reviewed by Jer Noble No new tests, existing tests updated. * CMakeLists.txt: Add MediaStreamSourceStates.cpp. * Modules/mediastream/MediaSourceStates.cpp: (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates. (WebCore::MediaSourceStates::sourceType): Ditto. (WebCore::MediaSourceStates::facingMode): Ditto. * Modules/mediastream/MediaSourceStates.h: Ditto. * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addRemoteSource): (WebCore::MediaStream::removeRemoteSource): * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the private track do that. Change private track parameter to ref because it can't be NULL. (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto. (WebCore::MediaStreamTrack::setSource): Pass through to private track. (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::states): Ditto. (WebCore::MediaStreamTrack::capabilities): Ditto. (WebCore::MediaStreamTrack::applyConstraints): Ditto. (WebCore::MediaStreamTrack::stopProducingData): Ditto. (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't schedule an 'ended' event if called as a side effect of the stop() method having been called as per spec. (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged. (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged. (WebCore::MediaStreamTrack::stop): Pass through to private track. * Modules/mediastream/MediaStreamTrack.h: (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints. * WebCore.xcodeproj/project.pbxproj: Add new files. * bindings/js/JSMediaSourceStatesCustom.cpp: (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode is Unknown. * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and undefined method prototype. * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None. (WebCore::MediaStreamDescriptor::removeSource): Ditto. (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): * platform/mediastream/MediaStreamSource.cpp: (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes to Live, stopProducingData when it changes to Ended. (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers. (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled. (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have stopped, the spec says that track.stop() should permanently stop the track's source. * platform/mediastream/MediaStreamSource.h: (WebCore::MediaStreamSource::name): Make virtual so derived classes can override. (WebCore::MediaStreamSource::setName): Ditto. (WebCore::MediaStreamSource::readyState): Ditto. (WebCore::MediaStreamSource::enabled): Ditto. (WebCore::MediaStreamSource::muted): Ditto. (WebCore::MediaStreamSource::setReadonly): Ditto. (WebCore::MediaStreamSource::remote): Ditto. (WebCore::MediaStreamSource::setRemote): Ditto. (WebCore::MediaStreamSource::startProducingData): Added. (WebCore::MediaStreamSource::stopProducingData): Added. * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to its own file. * platform/mediastream/MediaStreamSourceStates.cpp: Added. (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the strings are available to platform code. (WebCore::MediaStreamSourceStates::sourceType): Ditto. * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr. (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables. (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer. (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer. (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client. (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source. (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged. (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source. (WebCore::MediaStreamTrackPrivate::states): Ditto. (WebCore::MediaStreamTrackPrivate::type): Ditto. (WebCore::MediaStreamTrackPrivate::capabilities): Ditto. (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto. (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes. (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query. (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/mac/AVAudioCaptureSource.h: Added. * platform/mediastream/mac/AVAudioCaptureSource.mm: Added. * platform/mediastream/mac/AVCaptureDeviceManager.h: Added. * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added. * platform/mediastream/mac/AVMediaCaptureSource.h: Added. * platform/mediastream/mac/AVMediaCaptureSource.mm: Added. * platform/mediastream/mac/AVVideoCaptureSource.h: Added. * platform/mediastream/mac/AVVideoCaptureSource.mm: Added. * platform/mediastream/mac/MediaStreamCenterMac.cpp: (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement. (WebCore::MediaStreamCenterMac::createMediaStream): Ditto. (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto. * platform/mock/MockMediaStreamCenter.cpp: (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes. (WebCore::MockMediaStreamCenter::createMediaStream): LayoutTests: Reviewed by Jer Noble. * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: Updated. * fast/mediastream/MediaStream-add-remove-tracks.html: Ditto. * fast/mediastream/MediaStreamConstructor-expected.txt: Ditto. * fast/mediastream/MediaStreamConstructor.html: Ditto. * fast/mediastream/MediaStreamTrack-getSources.html: Remove typo. * fast/mediastream/MediaStreamTrack-expected.txt: Updated results. * fast/mediastream/MediaStreamTrack.html: Update to test track.stop() behavior. Canonical link: https://commits.webkit.org/141590@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158220 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-29 20:48:21 +00:00
}
[MediaStream] Implement MediaStreamTrack.getSettings() https://bugs.webkit.org/show_bug.cgi?id=151727 Reviewed by Jer Noble. Source/WebCore: MediaStreamTrack.getStates has been replaced by MediaStreamTrack.getSettings. Test: fast/mediastream/MediaStreamTrack-getSettings.html * CMakeLists.txt: MediaSourceStates.* -> MediaSourceSettings.*. * DerivedSources.make: No more MediaSourceStates.idl. * Modules/mediastream/CapabilityRange.cpp: MediaSourceStates.* -> MediaSourceSettings.*. * Modules/mediastream/MediaSourceSettings.cpp: Copied from Source/WebCore/Modules/mediastream/MediaSourceStates.cpp. (WebCore::MediaSourceSettings::create): (WebCore::MediaSourceSettings::MediaSourceSettings): (WebCore::MediaSourceSettings::facingMode): (WebCore::MediaSourceStates::create): Deleted. (WebCore::MediaSourceStates::MediaSourceStates): Deleted. (WebCore::MediaSourceStates::sourceType): Deleted. (WebCore::MediaSourceStates::facingMode): Deleted. * Modules/mediastream/MediaSourceSettings.h: Copied from Source/WebCore/Modules/mediastream/MediaSourceStates.h. MediaSourceStates.* renamed to MediaSourceSettings.* and updated to new API. * Modules/mediastream/MediaSourceStates.cpp: Removed. * Modules/mediastream/MediaSourceStates.h: Removed. * Modules/mediastream/MediaSourceStates.idl: Removed. * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): Return an empty vector for now, will be fixed by the changes for https://bugs.webkit.org/show_bug.cgi?id=151728. (WebCore::MediaStreamCapabilities::sourceId): RealtimeMediaSourceStates -> MediaSourceSettings. (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::getSettings): New. (WebCore::MediaStreamTrack::getCapabilities): Don't modify states, just pass through whatever private track returns. (WebCore::MediaStreamTrack::trackSettingsChanged): (WebCore::MediaStreamTrack::states): Deleted. (WebCore::MediaStreamTrack::trackStatesChanged): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: MediaSourceStates -> MediaSourceSettings. * Modules/webaudio/MediaStreamAudioSource.cpp: (WebCore::MediaStreamAudioSource::settings): (WebCore::MediaStreamAudioSource::states): Deleted. * Modules/webaudio/MediaStreamAudioSource.h: MediaSourceStates -> MediaSourceSettings. * WebCore.xcodeproj/project.pbxproj: MediaSourceStates.* -> MediaSourceSettings.*. * bindings/js/JSMediaSourceStatesCustom.cpp: Removed. * bindings/js/JSMediaStreamTrackCustom.cpp: Added. (WebCore::JSMediaStreamTrack::getSettings): MediaSourceSettings is a generic dictionary so it has to be generated manually. * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::intrinsicSize): states -> settings. (WebCore::MediaStreamPrivate::trackStatesChanged): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::settings): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::states): Deleted. (WebCore::MediaStreamTrackPrivate::sourceStatesChanged): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::settingsDidChanged): (WebCore::RealtimeMediaSource::statesDidChanged): Deleted. * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/RealtimeMediaSourceCapabilities.h: (WebCore::RealtimeMediaSourceCapabilities::facingModes): States -> Settings. (WebCore::RealtimeMediaSourceCapabilities::addFacingMode): Ditto. (WebCore::RealtimeMediaSourceCapabilities::sourceTypes): Deleted. (WebCore::RealtimeMediaSourceCapabilities::setSourceType): Deleted. (WebCore::RealtimeMediaSourceCapabilities::addSourceType): Deleted. * platform/mediastream/RealtimeMediaSourceCenter.h: States -> Settings. * platform/mediastream/RealtimeMediaSourceSettings.cpp: Copied from Source/WebCore/platform/mediastream/RealtimeMediaSourceStates.cpp. (WebCore::RealtimeMediaSourceSettings::facingMode): (WebCore::RealtimeMediaSourceStates::facingMode): Deleted. (WebCore::RealtimeMediaSourceStates::sourceType): Deleted. * platform/mediastream/RealtimeMediaSourceSettings.h: Copied from Source/WebCore/platform/mediastream/RealtimeMediaSourceStates.h. * platform/mediastream/RealtimeMediaSourceStates.cpp: Removed. * platform/mediastream/RealtimeMediaSourceStates.h: Removed. * platform/mediastream/mac/AVAudioCaptureSource.h: * platform/mediastream/mac/AVAudioCaptureSource.mm: (WebCore::AVAudioCaptureSource::updateStates): Deleted. * platform/mediastream/mac/AVCaptureDeviceManager.h: * platform/mediastream/mac/AVCaptureDeviceManager.mm: * platform/mediastream/mac/AVMediaCaptureSource.h: * platform/mediastream/mac/AVMediaCaptureSource.mm: (WebCore::AVMediaCaptureSource::states): Deleted. * platform/mediastream/mac/AVVideoCaptureSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::updateStates): Deleted. * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm: * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h: * platform/mock/MockRealtimeAudioSource.cpp: (WebCore::MockRealtimeAudioSource::initializeSupportedConstraints): (WebCore::MockRealtimeAudioSource::updateStates): Deleted. * platform/mock/MockRealtimeAudioSource.h: * platform/mock/MockRealtimeMediaSource.cpp: (WebCore::MockRealtimeMediaSource::capabilities): Minor cleanup. (WebCore::MockRealtimeMediaSource::settings): (WebCore::MockRealtimeMediaSource::supportedConstraints): (WebCore::MockRealtimeMediaSource::states): Deleted. * platform/mock/MockRealtimeMediaSource.h: (WebCore::MockRealtimeMediaSource::constraints): (WebCore::MockRealtimeMediaSource::currentStates): Deleted. * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::updateSettings): (WebCore::MockRealtimeVideoSource::initializeCapabilities): (WebCore::MockRealtimeVideoSource::initializeSupportedConstraints): (WebCore::MockRealtimeVideoSource::setFrameRate): states -> settings. (WebCore::MockRealtimeVideoSource::setSize): Ditto. (WebCore::MockRealtimeVideoSource::drawAnimation): Ditto. (WebCore::MockRealtimeVideoSource::drawText): Ditto. (WebCore::MockRealtimeVideoSource::updateStates): Deleted. (WebCore::MockRealtimeVideoSource::setFacingMode): Deleted. * platform/mock/MockRealtimeVideoSource.h: LayoutTests: * fast/mediastream/MediaStream-video-element-expected.txt: * fast/mediastream/MediaStream-video-element-track-stop-expected.txt: * fast/mediastream/MediaStream-video-element-track-stop.html: * fast/mediastream/MediaStream-video-element.html: * fast/mediastream/MediaStreamTrack-getSettings-expected.txt: Added. * fast/mediastream/MediaStreamTrack-getSettings.html: Added. Canonical link: https://commits.webkit.org/169900@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@192954 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-12-02 20:20:37 +00:00
const RealtimeMediaSourceSettings& MediaStreamTrackPrivate::settings() const
[Mac MediaStream] implement AVFoundation backed MediaStreamSource https://bugs.webkit.org/show_bug.cgi?id=123316 Source/WebCore: Reviewed by Jer Noble No new tests, existing tests updated. * CMakeLists.txt: Add MediaStreamSourceStates.cpp. * Modules/mediastream/MediaSourceStates.cpp: (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates. (WebCore::MediaSourceStates::sourceType): Ditto. (WebCore::MediaSourceStates::facingMode): Ditto. * Modules/mediastream/MediaSourceStates.h: Ditto. * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addRemoteSource): (WebCore::MediaStream::removeRemoteSource): * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the private track do that. Change private track parameter to ref because it can't be NULL. (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto. (WebCore::MediaStreamTrack::setSource): Pass through to private track. (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::states): Ditto. (WebCore::MediaStreamTrack::capabilities): Ditto. (WebCore::MediaStreamTrack::applyConstraints): Ditto. (WebCore::MediaStreamTrack::stopProducingData): Ditto. (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't schedule an 'ended' event if called as a side effect of the stop() method having been called as per spec. (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged. (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged. (WebCore::MediaStreamTrack::stop): Pass through to private track. * Modules/mediastream/MediaStreamTrack.h: (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints. * WebCore.xcodeproj/project.pbxproj: Add new files. * bindings/js/JSMediaSourceStatesCustom.cpp: (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode is Unknown. * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and undefined method prototype. * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None. (WebCore::MediaStreamDescriptor::removeSource): Ditto. (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): * platform/mediastream/MediaStreamSource.cpp: (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes to Live, stopProducingData when it changes to Ended. (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers. (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled. (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have stopped, the spec says that track.stop() should permanently stop the track's source. * platform/mediastream/MediaStreamSource.h: (WebCore::MediaStreamSource::name): Make virtual so derived classes can override. (WebCore::MediaStreamSource::setName): Ditto. (WebCore::MediaStreamSource::readyState): Ditto. (WebCore::MediaStreamSource::enabled): Ditto. (WebCore::MediaStreamSource::muted): Ditto. (WebCore::MediaStreamSource::setReadonly): Ditto. (WebCore::MediaStreamSource::remote): Ditto. (WebCore::MediaStreamSource::setRemote): Ditto. (WebCore::MediaStreamSource::startProducingData): Added. (WebCore::MediaStreamSource::stopProducingData): Added. * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to its own file. * platform/mediastream/MediaStreamSourceStates.cpp: Added. (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the strings are available to platform code. (WebCore::MediaStreamSourceStates::sourceType): Ditto. * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr. (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables. (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer. (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer. (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client. (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source. (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged. (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source. (WebCore::MediaStreamTrackPrivate::states): Ditto. (WebCore::MediaStreamTrackPrivate::type): Ditto. (WebCore::MediaStreamTrackPrivate::capabilities): Ditto. (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto. (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes. (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query. (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/mac/AVAudioCaptureSource.h: Added. * platform/mediastream/mac/AVAudioCaptureSource.mm: Added. * platform/mediastream/mac/AVCaptureDeviceManager.h: Added. * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added. * platform/mediastream/mac/AVMediaCaptureSource.h: Added. * platform/mediastream/mac/AVMediaCaptureSource.mm: Added. * platform/mediastream/mac/AVVideoCaptureSource.h: Added. * platform/mediastream/mac/AVVideoCaptureSource.mm: Added. * platform/mediastream/mac/MediaStreamCenterMac.cpp: (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement. (WebCore::MediaStreamCenterMac::createMediaStream): Ditto. (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto. * platform/mock/MockMediaStreamCenter.cpp: (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes. (WebCore::MockMediaStreamCenter::createMediaStream): LayoutTests: Reviewed by Jer Noble. * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: Updated. * fast/mediastream/MediaStream-add-remove-tracks.html: Ditto. * fast/mediastream/MediaStreamConstructor-expected.txt: Ditto. * fast/mediastream/MediaStreamConstructor.html: Ditto. * fast/mediastream/MediaStreamTrack-getSources.html: Remove typo. * fast/mediastream/MediaStreamTrack-expected.txt: Updated results. * fast/mediastream/MediaStreamTrack.html: Update to test track.stop() behavior. Canonical link: https://commits.webkit.org/141590@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158220 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-29 20:48:21 +00:00
{
[MediaStream] Implement MediaStreamTrack.getSettings() https://bugs.webkit.org/show_bug.cgi?id=151727 Reviewed by Jer Noble. Source/WebCore: MediaStreamTrack.getStates has been replaced by MediaStreamTrack.getSettings. Test: fast/mediastream/MediaStreamTrack-getSettings.html * CMakeLists.txt: MediaSourceStates.* -> MediaSourceSettings.*. * DerivedSources.make: No more MediaSourceStates.idl. * Modules/mediastream/CapabilityRange.cpp: MediaSourceStates.* -> MediaSourceSettings.*. * Modules/mediastream/MediaSourceSettings.cpp: Copied from Source/WebCore/Modules/mediastream/MediaSourceStates.cpp. (WebCore::MediaSourceSettings::create): (WebCore::MediaSourceSettings::MediaSourceSettings): (WebCore::MediaSourceSettings::facingMode): (WebCore::MediaSourceStates::create): Deleted. (WebCore::MediaSourceStates::MediaSourceStates): Deleted. (WebCore::MediaSourceStates::sourceType): Deleted. (WebCore::MediaSourceStates::facingMode): Deleted. * Modules/mediastream/MediaSourceSettings.h: Copied from Source/WebCore/Modules/mediastream/MediaSourceStates.h. MediaSourceStates.* renamed to MediaSourceSettings.* and updated to new API. * Modules/mediastream/MediaSourceStates.cpp: Removed. * Modules/mediastream/MediaSourceStates.h: Removed. * Modules/mediastream/MediaSourceStates.idl: Removed. * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): Return an empty vector for now, will be fixed by the changes for https://bugs.webkit.org/show_bug.cgi?id=151728. (WebCore::MediaStreamCapabilities::sourceId): RealtimeMediaSourceStates -> MediaSourceSettings. (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::getSettings): New. (WebCore::MediaStreamTrack::getCapabilities): Don't modify states, just pass through whatever private track returns. (WebCore::MediaStreamTrack::trackSettingsChanged): (WebCore::MediaStreamTrack::states): Deleted. (WebCore::MediaStreamTrack::trackStatesChanged): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: MediaSourceStates -> MediaSourceSettings. * Modules/webaudio/MediaStreamAudioSource.cpp: (WebCore::MediaStreamAudioSource::settings): (WebCore::MediaStreamAudioSource::states): Deleted. * Modules/webaudio/MediaStreamAudioSource.h: MediaSourceStates -> MediaSourceSettings. * WebCore.xcodeproj/project.pbxproj: MediaSourceStates.* -> MediaSourceSettings.*. * bindings/js/JSMediaSourceStatesCustom.cpp: Removed. * bindings/js/JSMediaStreamTrackCustom.cpp: Added. (WebCore::JSMediaStreamTrack::getSettings): MediaSourceSettings is a generic dictionary so it has to be generated manually. * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::intrinsicSize): states -> settings. (WebCore::MediaStreamPrivate::trackStatesChanged): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::settings): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::states): Deleted. (WebCore::MediaStreamTrackPrivate::sourceStatesChanged): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::settingsDidChanged): (WebCore::RealtimeMediaSource::statesDidChanged): Deleted. * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/RealtimeMediaSourceCapabilities.h: (WebCore::RealtimeMediaSourceCapabilities::facingModes): States -> Settings. (WebCore::RealtimeMediaSourceCapabilities::addFacingMode): Ditto. (WebCore::RealtimeMediaSourceCapabilities::sourceTypes): Deleted. (WebCore::RealtimeMediaSourceCapabilities::setSourceType): Deleted. (WebCore::RealtimeMediaSourceCapabilities::addSourceType): Deleted. * platform/mediastream/RealtimeMediaSourceCenter.h: States -> Settings. * platform/mediastream/RealtimeMediaSourceSettings.cpp: Copied from Source/WebCore/platform/mediastream/RealtimeMediaSourceStates.cpp. (WebCore::RealtimeMediaSourceSettings::facingMode): (WebCore::RealtimeMediaSourceStates::facingMode): Deleted. (WebCore::RealtimeMediaSourceStates::sourceType): Deleted. * platform/mediastream/RealtimeMediaSourceSettings.h: Copied from Source/WebCore/platform/mediastream/RealtimeMediaSourceStates.h. * platform/mediastream/RealtimeMediaSourceStates.cpp: Removed. * platform/mediastream/RealtimeMediaSourceStates.h: Removed. * platform/mediastream/mac/AVAudioCaptureSource.h: * platform/mediastream/mac/AVAudioCaptureSource.mm: (WebCore::AVAudioCaptureSource::updateStates): Deleted. * platform/mediastream/mac/AVCaptureDeviceManager.h: * platform/mediastream/mac/AVCaptureDeviceManager.mm: * platform/mediastream/mac/AVMediaCaptureSource.h: * platform/mediastream/mac/AVMediaCaptureSource.mm: (WebCore::AVMediaCaptureSource::states): Deleted. * platform/mediastream/mac/AVVideoCaptureSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::updateStates): Deleted. * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm: * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h: * platform/mock/MockRealtimeAudioSource.cpp: (WebCore::MockRealtimeAudioSource::initializeSupportedConstraints): (WebCore::MockRealtimeAudioSource::updateStates): Deleted. * platform/mock/MockRealtimeAudioSource.h: * platform/mock/MockRealtimeMediaSource.cpp: (WebCore::MockRealtimeMediaSource::capabilities): Minor cleanup. (WebCore::MockRealtimeMediaSource::settings): (WebCore::MockRealtimeMediaSource::supportedConstraints): (WebCore::MockRealtimeMediaSource::states): Deleted. * platform/mock/MockRealtimeMediaSource.h: (WebCore::MockRealtimeMediaSource::constraints): (WebCore::MockRealtimeMediaSource::currentStates): Deleted. * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::updateSettings): (WebCore::MockRealtimeVideoSource::initializeCapabilities): (WebCore::MockRealtimeVideoSource::initializeSupportedConstraints): (WebCore::MockRealtimeVideoSource::setFrameRate): states -> settings. (WebCore::MockRealtimeVideoSource::setSize): Ditto. (WebCore::MockRealtimeVideoSource::drawAnimation): Ditto. (WebCore::MockRealtimeVideoSource::drawText): Ditto. (WebCore::MockRealtimeVideoSource::updateStates): Deleted. (WebCore::MockRealtimeVideoSource::setFacingMode): Deleted. * platform/mock/MockRealtimeVideoSource.h: LayoutTests: * fast/mediastream/MediaStream-video-element-expected.txt: * fast/mediastream/MediaStream-video-element-track-stop-expected.txt: * fast/mediastream/MediaStream-video-element-track-stop.html: * fast/mediastream/MediaStream-video-element.html: * fast/mediastream/MediaStreamTrack-getSettings-expected.txt: Added. * fast/mediastream/MediaStreamTrack-getSettings.html: Added. Canonical link: https://commits.webkit.org/169900@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@192954 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-12-02 20:20:37 +00:00
return m_source->settings();
[Mac MediaStream] implement AVFoundation backed MediaStreamSource https://bugs.webkit.org/show_bug.cgi?id=123316 Source/WebCore: Reviewed by Jer Noble No new tests, existing tests updated. * CMakeLists.txt: Add MediaStreamSourceStates.cpp. * Modules/mediastream/MediaSourceStates.cpp: (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates. (WebCore::MediaSourceStates::sourceType): Ditto. (WebCore::MediaSourceStates::facingMode): Ditto. * Modules/mediastream/MediaSourceStates.h: Ditto. * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addRemoteSource): (WebCore::MediaStream::removeRemoteSource): * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the private track do that. Change private track parameter to ref because it can't be NULL. (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto. (WebCore::MediaStreamTrack::setSource): Pass through to private track. (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::states): Ditto. (WebCore::MediaStreamTrack::capabilities): Ditto. (WebCore::MediaStreamTrack::applyConstraints): Ditto. (WebCore::MediaStreamTrack::stopProducingData): Ditto. (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't schedule an 'ended' event if called as a side effect of the stop() method having been called as per spec. (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged. (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged. (WebCore::MediaStreamTrack::stop): Pass through to private track. * Modules/mediastream/MediaStreamTrack.h: (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints. * WebCore.xcodeproj/project.pbxproj: Add new files. * bindings/js/JSMediaSourceStatesCustom.cpp: (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode is Unknown. * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and undefined method prototype. * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None. (WebCore::MediaStreamDescriptor::removeSource): Ditto. (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): * platform/mediastream/MediaStreamSource.cpp: (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes to Live, stopProducingData when it changes to Ended. (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers. (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled. (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have stopped, the spec says that track.stop() should permanently stop the track's source. * platform/mediastream/MediaStreamSource.h: (WebCore::MediaStreamSource::name): Make virtual so derived classes can override. (WebCore::MediaStreamSource::setName): Ditto. (WebCore::MediaStreamSource::readyState): Ditto. (WebCore::MediaStreamSource::enabled): Ditto. (WebCore::MediaStreamSource::muted): Ditto. (WebCore::MediaStreamSource::setReadonly): Ditto. (WebCore::MediaStreamSource::remote): Ditto. (WebCore::MediaStreamSource::setRemote): Ditto. (WebCore::MediaStreamSource::startProducingData): Added. (WebCore::MediaStreamSource::stopProducingData): Added. * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to its own file. * platform/mediastream/MediaStreamSourceStates.cpp: Added. (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the strings are available to platform code. (WebCore::MediaStreamSourceStates::sourceType): Ditto. * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr. (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables. (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer. (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer. (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client. (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source. (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged. (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source. (WebCore::MediaStreamTrackPrivate::states): Ditto. (WebCore::MediaStreamTrackPrivate::type): Ditto. (WebCore::MediaStreamTrackPrivate::capabilities): Ditto. (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto. (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes. (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query. (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/mac/AVAudioCaptureSource.h: Added. * platform/mediastream/mac/AVAudioCaptureSource.mm: Added. * platform/mediastream/mac/AVCaptureDeviceManager.h: Added. * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added. * platform/mediastream/mac/AVMediaCaptureSource.h: Added. * platform/mediastream/mac/AVMediaCaptureSource.mm: Added. * platform/mediastream/mac/AVVideoCaptureSource.h: Added. * platform/mediastream/mac/AVVideoCaptureSource.mm: Added. * platform/mediastream/mac/MediaStreamCenterMac.cpp: (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement. (WebCore::MediaStreamCenterMac::createMediaStream): Ditto. (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto. * platform/mock/MockMediaStreamCenter.cpp: (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes. (WebCore::MockMediaStreamCenter::createMediaStream): LayoutTests: Reviewed by Jer Noble. * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: Updated. * fast/mediastream/MediaStream-add-remove-tracks.html: Ditto. * fast/mediastream/MediaStreamConstructor-expected.txt: Ditto. * fast/mediastream/MediaStreamConstructor.html: Ditto. * fast/mediastream/MediaStreamTrack-getSources.html: Remove typo. * fast/mediastream/MediaStreamTrack-expected.txt: Updated results. * fast/mediastream/MediaStreamTrack.html: Update to test track.stop() behavior. Canonical link: https://commits.webkit.org/141590@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158220 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-29 20:48:21 +00:00
}
[MediaSource] Push capabilities across process boundary during UIProcess capture. https://bugs.webkit.org/show_bug.cgi?id=170814 Reviewed by Eric Carlson. Source/WebCore: There's no real reason for RealtimeMediaSourceCapabilities to be RefCounted nor to keep them from being created on the stack. So in addition to making that class coder-compliant, change all the classes that vend capabilities to use a unique_ptr<> instead of a RefPtr<>. * Modules/mediastream/CanvasCaptureMediaStreamTrack.h: * Modules/webaudio/MediaStreamAudioSource.cpp: (WebCore::MediaStreamAudioSource::capabilities): * Modules/webaudio/MediaStreamAudioSource.h: * platform/mediastream/MediaEndpoint.cpp: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::capabilities): * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/RealtimeMediaSourceCapabilities.h: (WebCore::CapabilityValueOrRange::encode): (WebCore::CapabilityValueOrRange::decode): (WebCore::RealtimeMediaSourceCapabilities::RealtimeMediaSourceCapabilities): (WebCore::RealtimeMediaSourceCapabilities::supportedConstraints): (WebCore::RealtimeMediaSourceCapabilities::setSupportedConstraints): (WebCore::RealtimeMediaSourceCapabilities::encode): (WebCore::RealtimeMediaSourceCapabilities::decode): (WebCore::RealtimeMediaSourceCapabilities::create): Deleted. * platform/mediastream/RealtimeMediaSourceSettings.h: * platform/mediastream/mac/AVMediaCaptureSource.h: * platform/mediastream/mac/AVMediaCaptureSource.mm: (WebCore::AVMediaCaptureSource::initializeCapabilities): (WebCore::AVMediaCaptureSource::capabilities): * platform/mediastream/mac/CoreAudioCaptureSource.cpp: (WebCore::CoreAudioCaptureSource::capabilities): * platform/mediastream/mac/CoreAudioCaptureSource.h: * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp: (WebCore::RealtimeIncomingAudioSource::capabilities): * platform/mediastream/mac/RealtimeIncomingAudioSource.h: * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp: (WebCore::RealtimeIncomingVideoSource::capabilities): * platform/mediastream/mac/RealtimeIncomingVideoSource.h: * platform/mock/MockRealtimeMediaSource.cpp: (WebCore::MockRealtimeMediaSource::initializeCapabilities): (WebCore::MockRealtimeMediaSource::capabilities): * platform/mock/MockRealtimeMediaSource.h: * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h: Source/WebKit2: Make a new synchronous getter for capabilities(), moderated by only requesting the capabilities() cross-process the first time called. * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::capabilities): (WebKit::UserMediaCaptureManagerProxy::supportedConstraints): * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h: * UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in: * WebProcess/cocoa/UserMediaCaptureManager.cpp: (WebKit::UserMediaCaptureManager::Source::setCapabilities): (WebKit::UserMediaCaptureManager::capabilities): * WebProcess/cocoa/UserMediaCaptureManager.h: Canonical link: https://commits.webkit.org/187779@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215362 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-14 16:04:52 +00:00
const RealtimeMediaSourceCapabilities& MediaStreamTrackPrivate::capabilities() const
[Mac MediaStream] implement AVFoundation backed MediaStreamSource https://bugs.webkit.org/show_bug.cgi?id=123316 Source/WebCore: Reviewed by Jer Noble No new tests, existing tests updated. * CMakeLists.txt: Add MediaStreamSourceStates.cpp. * Modules/mediastream/MediaSourceStates.cpp: (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates. (WebCore::MediaSourceStates::sourceType): Ditto. (WebCore::MediaSourceStates::facingMode): Ditto. * Modules/mediastream/MediaSourceStates.h: Ditto. * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addRemoteSource): (WebCore::MediaStream::removeRemoteSource): * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the private track do that. Change private track parameter to ref because it can't be NULL. (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto. (WebCore::MediaStreamTrack::setSource): Pass through to private track. (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::states): Ditto. (WebCore::MediaStreamTrack::capabilities): Ditto. (WebCore::MediaStreamTrack::applyConstraints): Ditto. (WebCore::MediaStreamTrack::stopProducingData): Ditto. (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't schedule an 'ended' event if called as a side effect of the stop() method having been called as per spec. (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged. (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged. (WebCore::MediaStreamTrack::stop): Pass through to private track. * Modules/mediastream/MediaStreamTrack.h: (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints. * WebCore.xcodeproj/project.pbxproj: Add new files. * bindings/js/JSMediaSourceStatesCustom.cpp: (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode is Unknown. * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and undefined method prototype. * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None. (WebCore::MediaStreamDescriptor::removeSource): Ditto. (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): * platform/mediastream/MediaStreamSource.cpp: (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes to Live, stopProducingData when it changes to Ended. (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers. (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled. (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have stopped, the spec says that track.stop() should permanently stop the track's source. * platform/mediastream/MediaStreamSource.h: (WebCore::MediaStreamSource::name): Make virtual so derived classes can override. (WebCore::MediaStreamSource::setName): Ditto. (WebCore::MediaStreamSource::readyState): Ditto. (WebCore::MediaStreamSource::enabled): Ditto. (WebCore::MediaStreamSource::muted): Ditto. (WebCore::MediaStreamSource::setReadonly): Ditto. (WebCore::MediaStreamSource::remote): Ditto. (WebCore::MediaStreamSource::setRemote): Ditto. (WebCore::MediaStreamSource::startProducingData): Added. (WebCore::MediaStreamSource::stopProducingData): Added. * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to its own file. * platform/mediastream/MediaStreamSourceStates.cpp: Added. (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the strings are available to platform code. (WebCore::MediaStreamSourceStates::sourceType): Ditto. * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr. (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables. (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer. (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer. (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client. (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source. (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged. (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source. (WebCore::MediaStreamTrackPrivate::states): Ditto. (WebCore::MediaStreamTrackPrivate::type): Ditto. (WebCore::MediaStreamTrackPrivate::capabilities): Ditto. (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto. (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes. (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query. (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/mac/AVAudioCaptureSource.h: Added. * platform/mediastream/mac/AVAudioCaptureSource.mm: Added. * platform/mediastream/mac/AVCaptureDeviceManager.h: Added. * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added. * platform/mediastream/mac/AVMediaCaptureSource.h: Added. * platform/mediastream/mac/AVMediaCaptureSource.mm: Added. * platform/mediastream/mac/AVVideoCaptureSource.h: Added. * platform/mediastream/mac/AVVideoCaptureSource.mm: Added. * platform/mediastream/mac/MediaStreamCenterMac.cpp: (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement. (WebCore::MediaStreamCenterMac::createMediaStream): Ditto. (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto. * platform/mock/MockMediaStreamCenter.cpp: (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes. (WebCore::MockMediaStreamCenter::createMediaStream): LayoutTests: Reviewed by Jer Noble. * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: Updated. * fast/mediastream/MediaStream-add-remove-tracks.html: Ditto. * fast/mediastream/MediaStreamConstructor-expected.txt: Ditto. * fast/mediastream/MediaStreamConstructor.html: Ditto. * fast/mediastream/MediaStreamTrack-getSources.html: Remove typo. * fast/mediastream/MediaStreamTrack-expected.txt: Updated results. * fast/mediastream/MediaStreamTrack.html: Update to test track.stop() behavior. Canonical link: https://commits.webkit.org/141590@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158220 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-29 20:48:21 +00:00
{
return m_source->capabilities();
}
Simplify applyConstraints callbacks https://bugs.webkit.org/show_bug.cgi?id=194297 Reviewed by Eric Carlson. Source/WebCore: Make use of one callback for both success and failure cases. No changed of behavior. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::applyConstraints): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::applyConstraints): * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::applyConstraints): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::create): * platform/mediastream/mac/CoreAudioCaptureSource.cpp: (WebCore::CoreAudioCaptureSource::create): * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.cpp: (WebCore::MockGStreamerAudioCaptureSource::applyConstraints): * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.h: * platform/mediastream/gstreamer/MockGStreamerVideoCaptureSource.cpp: (WebCore::MockGStreamerVideoCaptureSource::applyConstraints): * platform/mediastream/gstreamer/MockGStreamerVideoCaptureSource.h: Source/WebKit: * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::applyConstraints): * WebProcess/cocoa/UserMediaCaptureManager.cpp: (WebKit::UserMediaCaptureManager::Source::applyConstraintsSucceeded): (WebKit::UserMediaCaptureManager::Source::applyConstraintsFailed): (WebKit::UserMediaCaptureManager::applyConstraintsFailed): * WebProcess/cocoa/UserMediaCaptureManager.h: Canonical link: https://commits.webkit.org/208832@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241145 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-02-07 22:52:15 +00:00
void MediaStreamTrackPrivate::applyConstraints(const MediaConstraints& constraints, RealtimeMediaSource::ApplyConstraintsHandler&& completionHandler)
[Mac MediaStream] implement AVFoundation backed MediaStreamSource https://bugs.webkit.org/show_bug.cgi?id=123316 Source/WebCore: Reviewed by Jer Noble No new tests, existing tests updated. * CMakeLists.txt: Add MediaStreamSourceStates.cpp. * Modules/mediastream/MediaSourceStates.cpp: (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates. (WebCore::MediaSourceStates::sourceType): Ditto. (WebCore::MediaSourceStates::facingMode): Ditto. * Modules/mediastream/MediaSourceStates.h: Ditto. * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addRemoteSource): (WebCore::MediaStream::removeRemoteSource): * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the private track do that. Change private track parameter to ref because it can't be NULL. (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto. (WebCore::MediaStreamTrack::setSource): Pass through to private track. (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::states): Ditto. (WebCore::MediaStreamTrack::capabilities): Ditto. (WebCore::MediaStreamTrack::applyConstraints): Ditto. (WebCore::MediaStreamTrack::stopProducingData): Ditto. (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't schedule an 'ended' event if called as a side effect of the stop() method having been called as per spec. (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged. (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged. (WebCore::MediaStreamTrack::stop): Pass through to private track. * Modules/mediastream/MediaStreamTrack.h: (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints. * WebCore.xcodeproj/project.pbxproj: Add new files. * bindings/js/JSMediaSourceStatesCustom.cpp: (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode is Unknown. * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and undefined method prototype. * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None. (WebCore::MediaStreamDescriptor::removeSource): Ditto. (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): * platform/mediastream/MediaStreamSource.cpp: (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes to Live, stopProducingData when it changes to Ended. (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers. (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled. (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have stopped, the spec says that track.stop() should permanently stop the track's source. * platform/mediastream/MediaStreamSource.h: (WebCore::MediaStreamSource::name): Make virtual so derived classes can override. (WebCore::MediaStreamSource::setName): Ditto. (WebCore::MediaStreamSource::readyState): Ditto. (WebCore::MediaStreamSource::enabled): Ditto. (WebCore::MediaStreamSource::muted): Ditto. (WebCore::MediaStreamSource::setReadonly): Ditto. (WebCore::MediaStreamSource::remote): Ditto. (WebCore::MediaStreamSource::setRemote): Ditto. (WebCore::MediaStreamSource::startProducingData): Added. (WebCore::MediaStreamSource::stopProducingData): Added. * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to its own file. * platform/mediastream/MediaStreamSourceStates.cpp: Added. (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the strings are available to platform code. (WebCore::MediaStreamSourceStates::sourceType): Ditto. * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr. (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables. (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer. (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer. (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client. (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source. (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged. (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source. (WebCore::MediaStreamTrackPrivate::states): Ditto. (WebCore::MediaStreamTrackPrivate::type): Ditto. (WebCore::MediaStreamTrackPrivate::capabilities): Ditto. (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto. (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes. (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query. (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/mac/AVAudioCaptureSource.h: Added. * platform/mediastream/mac/AVAudioCaptureSource.mm: Added. * platform/mediastream/mac/AVCaptureDeviceManager.h: Added. * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added. * platform/mediastream/mac/AVMediaCaptureSource.h: Added. * platform/mediastream/mac/AVMediaCaptureSource.mm: Added. * platform/mediastream/mac/AVVideoCaptureSource.h: Added. * platform/mediastream/mac/AVVideoCaptureSource.mm: Added. * platform/mediastream/mac/MediaStreamCenterMac.cpp: (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement. (WebCore::MediaStreamCenterMac::createMediaStream): Ditto. (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto. * platform/mock/MockMediaStreamCenter.cpp: (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes. (WebCore::MockMediaStreamCenter::createMediaStream): LayoutTests: Reviewed by Jer Noble. * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: Updated. * fast/mediastream/MediaStream-add-remove-tracks.html: Ditto. * fast/mediastream/MediaStreamConstructor-expected.txt: Ditto. * fast/mediastream/MediaStreamConstructor.html: Ditto. * fast/mediastream/MediaStreamTrack-getSources.html: Remove typo. * fast/mediastream/MediaStreamTrack-expected.txt: Updated results. * fast/mediastream/MediaStreamTrack.html: Update to test track.stop() behavior. Canonical link: https://commits.webkit.org/141590@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158220 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-29 20:48:21 +00:00
{
Simplify applyConstraints callbacks https://bugs.webkit.org/show_bug.cgi?id=194297 Reviewed by Eric Carlson. Source/WebCore: Make use of one callback for both success and failure cases. No changed of behavior. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::applyConstraints): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::applyConstraints): * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::applyConstraints): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::create): * platform/mediastream/mac/CoreAudioCaptureSource.cpp: (WebCore::CoreAudioCaptureSource::create): * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.cpp: (WebCore::MockGStreamerAudioCaptureSource::applyConstraints): * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.h: * platform/mediastream/gstreamer/MockGStreamerVideoCaptureSource.cpp: (WebCore::MockGStreamerVideoCaptureSource::applyConstraints): * platform/mediastream/gstreamer/MockGStreamerVideoCaptureSource.h: Source/WebKit: * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::applyConstraints): * WebProcess/cocoa/UserMediaCaptureManager.cpp: (WebKit::UserMediaCaptureManager::Source::applyConstraintsSucceeded): (WebKit::UserMediaCaptureManager::Source::applyConstraintsFailed): (WebKit::UserMediaCaptureManager::applyConstraintsFailed): * WebProcess/cocoa/UserMediaCaptureManager.h: Canonical link: https://commits.webkit.org/208832@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241145 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-02-07 22:52:15 +00:00
m_source->applyConstraints(constraints, WTFMove(completionHandler));
[Mac MediaStream] implement AVFoundation backed MediaStreamSource https://bugs.webkit.org/show_bug.cgi?id=123316 Source/WebCore: Reviewed by Jer Noble No new tests, existing tests updated. * CMakeLists.txt: Add MediaStreamSourceStates.cpp. * Modules/mediastream/MediaSourceStates.cpp: (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates. (WebCore::MediaSourceStates::sourceType): Ditto. (WebCore::MediaSourceStates::facingMode): Ditto. * Modules/mediastream/MediaSourceStates.h: Ditto. * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addRemoteSource): (WebCore::MediaStream::removeRemoteSource): * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the private track do that. Change private track parameter to ref because it can't be NULL. (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto. (WebCore::MediaStreamTrack::setSource): Pass through to private track. (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::states): Ditto. (WebCore::MediaStreamTrack::capabilities): Ditto. (WebCore::MediaStreamTrack::applyConstraints): Ditto. (WebCore::MediaStreamTrack::stopProducingData): Ditto. (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't schedule an 'ended' event if called as a side effect of the stop() method having been called as per spec. (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged. (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged. (WebCore::MediaStreamTrack::stop): Pass through to private track. * Modules/mediastream/MediaStreamTrack.h: (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints. * WebCore.xcodeproj/project.pbxproj: Add new files. * bindings/js/JSMediaSourceStatesCustom.cpp: (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode is Unknown. * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and undefined method prototype. * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None. (WebCore::MediaStreamDescriptor::removeSource): Ditto. (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): * platform/mediastream/MediaStreamSource.cpp: (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes to Live, stopProducingData when it changes to Ended. (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers. (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled. (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have stopped, the spec says that track.stop() should permanently stop the track's source. * platform/mediastream/MediaStreamSource.h: (WebCore::MediaStreamSource::name): Make virtual so derived classes can override. (WebCore::MediaStreamSource::setName): Ditto. (WebCore::MediaStreamSource::readyState): Ditto. (WebCore::MediaStreamSource::enabled): Ditto. (WebCore::MediaStreamSource::muted): Ditto. (WebCore::MediaStreamSource::setReadonly): Ditto. (WebCore::MediaStreamSource::remote): Ditto. (WebCore::MediaStreamSource::setRemote): Ditto. (WebCore::MediaStreamSource::startProducingData): Added. (WebCore::MediaStreamSource::stopProducingData): Added. * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to its own file. * platform/mediastream/MediaStreamSourceStates.cpp: Added. (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the strings are available to platform code. (WebCore::MediaStreamSourceStates::sourceType): Ditto. * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr. (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables. (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer. (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer. (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client. (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source. (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged. (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source. (WebCore::MediaStreamTrackPrivate::states): Ditto. (WebCore::MediaStreamTrackPrivate::type): Ditto. (WebCore::MediaStreamTrackPrivate::capabilities): Ditto. (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto. (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes. (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query. (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/mac/AVAudioCaptureSource.h: Added. * platform/mediastream/mac/AVAudioCaptureSource.mm: Added. * platform/mediastream/mac/AVCaptureDeviceManager.h: Added. * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added. * platform/mediastream/mac/AVMediaCaptureSource.h: Added. * platform/mediastream/mac/AVMediaCaptureSource.mm: Added. * platform/mediastream/mac/AVVideoCaptureSource.h: Added. * platform/mediastream/mac/AVVideoCaptureSource.mm: Added. * platform/mediastream/mac/MediaStreamCenterMac.cpp: (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement. (WebCore::MediaStreamCenterMac::createMediaStream): Ditto. (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto. * platform/mock/MockMediaStreamCenter.cpp: (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes. (WebCore::MockMediaStreamCenter::createMediaStream): LayoutTests: Reviewed by Jer Noble. * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: Updated. * fast/mediastream/MediaStream-add-remove-tracks.html: Ditto. * fast/mediastream/MediaStreamConstructor-expected.txt: Ditto. * fast/mediastream/MediaStreamConstructor.html: Ditto. * fast/mediastream/MediaStreamTrack-getSources.html: Remove typo. * fast/mediastream/MediaStreamTrack-expected.txt: Updated results. * fast/mediastream/MediaStreamTrack.html: Update to test track.stop() behavior. Canonical link: https://commits.webkit.org/141590@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158220 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-29 20:48:21 +00:00
}
RefPtr<WebAudioSourceProvider> MediaStreamTrackPrivate::createAudioSourceProvider()
[MediaStream Mac] implement WebAudioSourceProvider https://bugs.webkit.org/show_bug.cgi?id=149419 Reviewed by Darin Adler. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::audioSourceProvider): New. * Modules/mediastream/MediaStreamTrack.h: * Modules/webaudio/AudioContext.cpp: (WebCore::AudioContext::createMediaStreamSource): Rewrite. * Modules/webaudio/MediaStreamAudioDestinationNode.cpp: (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): We know the Vector size, so reserve capacity. * Modules/webaudio/MediaStreamAudioSource.cpp: (WebCore::MediaStreamAudioSource::audioSourceProvider): Add. * Modules/webaudio/MediaStreamAudioSource.h: (WebCore::MediaStreamAudioSource::~MediaStreamAudioSource): (WebCore::MediaStreamAudioSource::deviceId): (WebCore::MediaStreamAudioSource::setDeviceId): (WebCore::MediaStreamAudioSource::useIDForTrackID): Deleted. * Modules/webaudio/MediaStreamAudioSourceNode.cpp: (WebCore::MediaStreamAudioSourceNode::create): Context and track can't be null so take references. (WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode): Ditto. (WebCore::MediaStreamAudioSourceNode::~MediaStreamAudioSourceNode): Clear provider client. (WebCore::MediaStreamAudioSourceNode::setFormat): Create a resampler when necessary. (WebCore::MediaStreamAudioSourceNode::process): Process. (WebCore::MediaStreamAudioSourceNode::reset): Deleted. * Modules/webaudio/MediaStreamAudioSourceNode.h: (WebCore::MediaStreamAudioSourceNode::mediaStream): (WebCore::MediaStreamAudioSourceNode::audioSourceProvider): Deleted. * WebCore.xcodeproj/project.pbxproj: Add WebAudioSourceProviderAVFObjC.cpp/h. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::audioSourceProvider): New, passthrough to source. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::audioSourceProvider): * platform/mediastream/mac/AVAudioCaptureSource.h: * platform/mediastream/mac/AVAudioCaptureSource.mm: (WebCore::AVAudioCaptureSource::audioSourceProvider): New. * platform/mediastream/mac/AVCaptureDeviceManager.mm: * platform/mediastream/mac/AVMediaCaptureSource.h: * platform/mediastream/mac/AVMediaCaptureSource.mm: (WebCore::AVMediaCaptureSource::audioSourceProvider): Assert, this shouldn't be reachable. * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h: Added. * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: Added. (WebCore::WebAudioSourceProviderAVFObjC::create): (WebCore::WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC): (WebCore::WebAudioSourceProviderAVFObjC::~WebAudioSourceProviderAVFObjC): (WebCore::WebAudioSourceProviderAVFObjC::startProducingData): (WebCore::WebAudioSourceProviderAVFObjC::stopProducingData): (WebCore::WebAudioSourceProviderAVFObjC::provideInput): (WebCore::WebAudioSourceProviderAVFObjC::setClient): (WebCore::operator==): (WebCore::operator!=): (WebCore::WebAudioSourceProviderAVFObjC::prepare): (WebCore::WebAudioSourceProviderAVFObjC::unprepare): (WebCore::WebAudioSourceProviderAVFObjC::process): Canonical link: https://commits.webkit.org/167546@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190115 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-09-22 14:31:24 +00:00
{
Add more MediaStream logging https://bugs.webkit.org/show_bug.cgi?id=223143 <rdar://problem/75380363> Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopTrack): (WebCore::MediaStreamTrack::trackStarted): (WebCore::MediaStreamTrack::trackEnded): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::createAudioSourceProvider): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::end): * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource): (WebCore::AVVideoCaptureSource::startProducingData): (WebCore::AVVideoCaptureSource::stopProducingData): (WebCore::AVVideoCaptureSource::shutdownCaptureSession): (WebCore::AVVideoCaptureSource::orientationChanged): Canonical link: https://commits.webkit.org/235243@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@274376 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-03-13 02:01:11 +00:00
ALWAYS_LOG(LOGIDENTIFIER);
A cloned MediaStreamTrack should mute independently other tracks using the same source https://bugs.webkit.org/show_bug.cgi?id=172831 <rdar://problem/32518527> Patch by Youenn Fablet <youenn@apple.com> on 2017-06-19 Reviewed by Eric Carlson. Source/WebCore: Test: webrtc/clone-audio-track.html Move enabled handling in MediaStreamTrackPrivate instead of RealtimeMediaSource. Move WebRTC and WebAudio customers of RealtimeMediaSource to MediaStreamTrackPrivate. Move creation of WebAudio provider to MediaStreamTrackPrivate. This allows changing some parameters of tracks having the same source independently. Using this for enabled track attribute. We no longer stop generating frames in case track is disabled. This should be added back as an optimization in a follow-up. * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: (WebCore::LibWebRTCMediaEndpoint::addTrack): * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: (WebCore::LibWebRTCPeerConnectionBackend::replaceTrack): * Modules/webaudio/MediaStreamAudioSource.cpp: * Modules/webaudio/MediaStreamAudioSource.h: * WebCore.xcodeproj/project.pbxproj: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::audioSourceProvider): (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::removeObserver): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AVMediaCaptureSource.h: * platform/mediastream/mac/AVMediaCaptureSource.mm: * platform/mediastream/mac/CoreAudioCaptureSource.cpp: (WebCore::CoreAudioCaptureSource::startProducingData): (WebCore::CoreAudioCaptureSource::stopProducingData): * platform/mediastream/mac/CoreAudioCaptureSource.h: * platform/mediastream/mac/MockRealtimeAudioSourceMac.h: * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm: (WebCore::MockRealtimeAudioSourceMac::render): * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp: (WebCore::RealtimeIncomingAudioSource::~RealtimeIncomingAudioSource): (WebCore::RealtimeIncomingAudioSource::OnData): * platform/mediastream/mac/RealtimeIncomingAudioSource.h: * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp: (WebCore::RealtimeIncomingVideoSource::pixelBufferFromVideoFrame): * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp: (WebCore::RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource): (WebCore::RealtimeOutgoingAudioSource::setSource): * platform/mediastream/mac/RealtimeOutgoingAudioSource.h: * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp: (WebCore::RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource): (WebCore::RealtimeOutgoingVideoSource::setSource): (WebCore::RealtimeOutgoingVideoSource::initializeFromSource): * platform/mediastream/mac/RealtimeOutgoingVideoSource.h: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: (WebCore::WebAudioSourceProviderAVFObjC::create): (WebCore::WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC): (WebCore::WebAudioSourceProviderAVFObjC::setClient): (WebCore::WebAudioSourceProviderAVFObjC::audioSamplesAvailable): * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::generateFrame): * platform/spi/cocoa/PassKitSPI.h: Source/WebKit2: * WebProcess/cocoa/UserMediaCaptureManager.cpp: (WebKit::UserMediaCaptureManager::Source::setStorage): LayoutTests: * webrtc/clone-audio-track.html: Added. * webrtc/video-disabled-black.html: * webrtc/video-unmute-expected.txt: * webrtc/video-unmute.html: Canonical link: https://commits.webkit.org/190441@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@218497 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-06-19 17:12:57 +00:00
#if PLATFORM(COCOA)
return MediaStreamTrackAudioSourceProviderCocoa::create(*this);
[WPE][GTK] Implement WebAudioSourceProviderGStreamer to allow bridging MediaStream and the WebAudio APIs https://bugs.webkit.org/show_bug.cgi?id=186933 Source/WebCore: Reusing the AudioSourceProviderGStreamer itself as it was doing almost everything we needed, just added a constructor to be able to create it from a MediaStreamTrackPrivate and made it a WebAudioSourceProvider which only means it is now a ThreadSafeRefCounted. Sensibily refactored GStreamerMediaStreamSource so that we could reuse it to track a single MediaStreamTrack. Patch by Thibault Saunier <tsaunier@igalia.com> on 2018-12-07 Reviewed by Philippe Normand. Enabled all tests depending on that feature. * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp: (WebCore::AudioSourceProviderGStreamer::AudioSourceProviderGStreamer): (WebCore::AudioSourceProviderGStreamer::~AudioSourceProviderGStreamer): (WebCore::AudioSourceProviderGStreamer::setClient): * platform/audio/gstreamer/AudioSourceProviderGStreamer.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::audioSourceProvider): * platform/mediastream/gstreamer/GStreamerAudioCapturer.cpp: (WebCore::GStreamerAudioCapturer::GStreamerAudioCapturer): * platform/mediastream/gstreamer/GStreamerAudioStreamDescription.h: * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp: (WebCore::webkitMediaStreamSrcSetupSrc): (WebCore::webkitMediaStreamSrcSetupAppSrc): (WebCore::webkitMediaStreamSrcAddTrack): (WebCore::webkitMediaStreamSrcSetStream): (WebCore::webkitMediaStreamSrcNew): * platform/mediastream/gstreamer/GStreamerMediaStreamSource.h: * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.cpp: (WebCore::WrappedMockRealtimeAudioSource::WrappedMockRealtimeAudioSource): (WebCore::WrappedMockRealtimeAudioSource::start): (WebCore::WrappedMockRealtimeAudioSource::addHum): (WebCore::WrappedMockRealtimeAudioSource::render): (WebCore::WrappedMockRealtimeAudioSource::settingsDidChange): (WebCore::MockGStreamerAudioCaptureSource::startProducingData): * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp: (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::pullAudioData): Handle the case where input buffers are "big" and process all the data we can for each runs of the method. LayoutTests: Patch by Thibault Saunier <tsaunier@igalia.com> on 2018-12-07 Reviewed by Philippe Normand. Enabled all tests depending on that feature. * platform/gtk/TestExpectations: * webrtc/clone-audio-track.html: Canonical link: https://commits.webkit.org/207075@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@238951 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-12-07 10:48:56 +00:00
#elif USE(LIBWEBRTC) && USE(GSTREAMER)
return AudioSourceProviderGStreamer::create(*this);
#else
return nullptr;
A cloned MediaStreamTrack should mute independently other tracks using the same source https://bugs.webkit.org/show_bug.cgi?id=172831 <rdar://problem/32518527> Patch by Youenn Fablet <youenn@apple.com> on 2017-06-19 Reviewed by Eric Carlson. Source/WebCore: Test: webrtc/clone-audio-track.html Move enabled handling in MediaStreamTrackPrivate instead of RealtimeMediaSource. Move WebRTC and WebAudio customers of RealtimeMediaSource to MediaStreamTrackPrivate. Move creation of WebAudio provider to MediaStreamTrackPrivate. This allows changing some parameters of tracks having the same source independently. Using this for enabled track attribute. We no longer stop generating frames in case track is disabled. This should be added back as an optimization in a follow-up. * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: (WebCore::LibWebRTCMediaEndpoint::addTrack): * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: (WebCore::LibWebRTCPeerConnectionBackend::replaceTrack): * Modules/webaudio/MediaStreamAudioSource.cpp: * Modules/webaudio/MediaStreamAudioSource.h: * WebCore.xcodeproj/project.pbxproj: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::audioSourceProvider): (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::removeObserver): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AVMediaCaptureSource.h: * platform/mediastream/mac/AVMediaCaptureSource.mm: * platform/mediastream/mac/CoreAudioCaptureSource.cpp: (WebCore::CoreAudioCaptureSource::startProducingData): (WebCore::CoreAudioCaptureSource::stopProducingData): * platform/mediastream/mac/CoreAudioCaptureSource.h: * platform/mediastream/mac/MockRealtimeAudioSourceMac.h: * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm: (WebCore::MockRealtimeAudioSourceMac::render): * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp: (WebCore::RealtimeIncomingAudioSource::~RealtimeIncomingAudioSource): (WebCore::RealtimeIncomingAudioSource::OnData): * platform/mediastream/mac/RealtimeIncomingAudioSource.h: * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp: (WebCore::RealtimeIncomingVideoSource::pixelBufferFromVideoFrame): * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp: (WebCore::RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource): (WebCore::RealtimeOutgoingAudioSource::setSource): * platform/mediastream/mac/RealtimeOutgoingAudioSource.h: * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp: (WebCore::RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource): (WebCore::RealtimeOutgoingVideoSource::setSource): (WebCore::RealtimeOutgoingVideoSource::initializeFromSource): * platform/mediastream/mac/RealtimeOutgoingVideoSource.h: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: (WebCore::WebAudioSourceProviderAVFObjC::create): (WebCore::WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC): (WebCore::WebAudioSourceProviderAVFObjC::setClient): (WebCore::WebAudioSourceProviderAVFObjC::audioSamplesAvailable): * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::generateFrame): * platform/spi/cocoa/PassKitSPI.h: Source/WebKit2: * WebProcess/cocoa/UserMediaCaptureManager.cpp: (WebKit::UserMediaCaptureManager::Source::setStorage): LayoutTests: * webrtc/clone-audio-track.html: Added. * webrtc/video-disabled-black.html: * webrtc/video-unmute-expected.txt: * webrtc/video-unmute.html: Canonical link: https://commits.webkit.org/190441@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@218497 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-06-19 17:12:57 +00:00
#endif
[MediaStream Mac] implement WebAudioSourceProvider https://bugs.webkit.org/show_bug.cgi?id=149419 Reviewed by Darin Adler. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::audioSourceProvider): New. * Modules/mediastream/MediaStreamTrack.h: * Modules/webaudio/AudioContext.cpp: (WebCore::AudioContext::createMediaStreamSource): Rewrite. * Modules/webaudio/MediaStreamAudioDestinationNode.cpp: (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): We know the Vector size, so reserve capacity. * Modules/webaudio/MediaStreamAudioSource.cpp: (WebCore::MediaStreamAudioSource::audioSourceProvider): Add. * Modules/webaudio/MediaStreamAudioSource.h: (WebCore::MediaStreamAudioSource::~MediaStreamAudioSource): (WebCore::MediaStreamAudioSource::deviceId): (WebCore::MediaStreamAudioSource::setDeviceId): (WebCore::MediaStreamAudioSource::useIDForTrackID): Deleted. * Modules/webaudio/MediaStreamAudioSourceNode.cpp: (WebCore::MediaStreamAudioSourceNode::create): Context and track can't be null so take references. (WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode): Ditto. (WebCore::MediaStreamAudioSourceNode::~MediaStreamAudioSourceNode): Clear provider client. (WebCore::MediaStreamAudioSourceNode::setFormat): Create a resampler when necessary. (WebCore::MediaStreamAudioSourceNode::process): Process. (WebCore::MediaStreamAudioSourceNode::reset): Deleted. * Modules/webaudio/MediaStreamAudioSourceNode.h: (WebCore::MediaStreamAudioSourceNode::mediaStream): (WebCore::MediaStreamAudioSourceNode::audioSourceProvider): Deleted. * WebCore.xcodeproj/project.pbxproj: Add WebAudioSourceProviderAVFObjC.cpp/h. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::audioSourceProvider): New, passthrough to source. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::audioSourceProvider): * platform/mediastream/mac/AVAudioCaptureSource.h: * platform/mediastream/mac/AVAudioCaptureSource.mm: (WebCore::AVAudioCaptureSource::audioSourceProvider): New. * platform/mediastream/mac/AVCaptureDeviceManager.mm: * platform/mediastream/mac/AVMediaCaptureSource.h: * platform/mediastream/mac/AVMediaCaptureSource.mm: (WebCore::AVMediaCaptureSource::audioSourceProvider): Assert, this shouldn't be reachable. * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h: Added. * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: Added. (WebCore::WebAudioSourceProviderAVFObjC::create): (WebCore::WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC): (WebCore::WebAudioSourceProviderAVFObjC::~WebAudioSourceProviderAVFObjC): (WebCore::WebAudioSourceProviderAVFObjC::startProducingData): (WebCore::WebAudioSourceProviderAVFObjC::stopProducingData): (WebCore::WebAudioSourceProviderAVFObjC::provideInput): (WebCore::WebAudioSourceProviderAVFObjC::setClient): (WebCore::operator==): (WebCore::operator!=): (WebCore::WebAudioSourceProviderAVFObjC::prepare): (WebCore::WebAudioSourceProviderAVFObjC::unprepare): (WebCore::WebAudioSourceProviderAVFObjC::process): Canonical link: https://commits.webkit.org/167546@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190115 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-09-22 14:31:24 +00:00
}
[WebRTC] Removing a MediaStreamTrack from a MediaStream reports no recording to WebKit clients https://bugs.webkit.org/show_bug.cgi?id=173398 <rdar://problem/32592961> Reviewed by Eric Carlson. Source/WebCore: API Test: Tests/WebKit2/MediaStreamTrackDetached.mm Move the definition of a MediaStream as a MediaProducer from the stream itself to its constituent MediaStreamTracks. This ensures that, even if a MediaStreamTrack is removed from its stream, the document (and thus the clients) are notified that media capture is still occurring. Though MediaStream is no longer a MediaProducer, it still uses the MediaProducer's state concept to determine when to fire events. However it's mediaState() implementation will be moved into MediaStreamTrack, and will instead simply bitwise-or together each of it's track's mediaState(). The MediaStream notifies the document that its state has changed asynchronously, so do the same for MediaStreamTrack (which reduces the number of calls to the client when changes all occur during a single run loop). Because the MediaStreamTrackPrivate may be started externally (not by the MediaStreamTrack directly), add a new client method that notifies observers when the track has been started, and the MediaStreamTrack will use this notification to update the document with it's new mediaState(). * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::~MediaStream): (WebCore::MediaStream::mediaState): (WebCore::MediaStream::statusDidChange): (WebCore::MediaStream::characteristicsChanged): (WebCore::MediaStream::pageMutedStateDidChange): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::pageMutedStateDidChange): (WebCore::MediaStreamTrack::mediaState): (WebCore::MediaStreamTrack::trackStarted): (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stop): (WebCore::MediaStreamTrack::document): * Modules/mediastream/MediaStreamTrack.h: (WebCore::MediaStreamTrack::source): * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::trackStarted): * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::sourceStarted): * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::start): * platform/mediastream/RealtimeMediaSource.h: Tools: * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: * TestWebKitAPI/Tests/WebKit2/MediaStreamTrackDetached.mm: Added. (-[MediaStreamTrackDetachedUIDelegate _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]): (-[MediaStreamTrackDetachedUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]): (-[MediaStreamTrackDetachedUIDelegate _webView:mediaCaptureStateDidChange:]): (TestWebKitAPI::TEST): * TestWebKitAPI/Tests/WebKit2/mediastreamtrack-detached.html: Added. Canonical link: https://commits.webkit.org/190350@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@218399 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-06-16 18:46:29 +00:00
void MediaStreamTrackPrivate::sourceStarted()
{
Add more MediaStream logging https://bugs.webkit.org/show_bug.cgi?id=223143 <rdar://problem/75380363> Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopTrack): (WebCore::MediaStreamTrack::trackStarted): (WebCore::MediaStreamTrack::trackEnded): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::createAudioSourceProvider): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::end): * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource): (WebCore::AVVideoCaptureSource::startProducingData): (WebCore::AVVideoCaptureSource::stopProducingData): (WebCore::AVVideoCaptureSource::shutdownCaptureSession): (WebCore::AVVideoCaptureSource::orientationChanged): Canonical link: https://commits.webkit.org/235243@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@274376 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-03-13 02:01:11 +00:00
ALWAYS_LOG(LOGIDENTIFIER);
Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable() https://bugs.webkit.org/show_bug.cgi?id=188097 <rdar://problem/42558823> Reviewed by Eric Carlson. Source/WebCore: Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable(). RealtimeMediaSource::audioSamplesAvailable() is called on a background thread but iterates over observers that may get destroyed concurrently on the main thread. To address the issue: - Introduce a Lock to protect m_observer accesses - Copy observers to a Vector before iterating over them * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::forEachObserver const): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::sampleBufferUpdated): (WebCore::MediaStreamTrackPrivate::Observer::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addObserver): (WebCore::RealtimeMediaSource::removeObserver): (WebCore::RealtimeMediaSource::forEachObserver const): (WebCore::RealtimeMediaSource::notifyMutedObservers const): (WebCore::RealtimeMediaSource::settingsDidChange): (WebCore::RealtimeMediaSource::videoSampleAvailable): (WebCore::RealtimeMediaSource::audioSamplesAvailable): (WebCore::RealtimeMediaSource::start): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::captureFailed): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp: (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable): * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: Source/WebKit: * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: Canonical link: https://commits.webkit.org/203253@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234334 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-07-27 22:33:52 +00:00
forEachObserver([this](auto& observer) {
observer.trackStarted(*this);
});
[WebRTC] Removing a MediaStreamTrack from a MediaStream reports no recording to WebKit clients https://bugs.webkit.org/show_bug.cgi?id=173398 <rdar://problem/32592961> Reviewed by Eric Carlson. Source/WebCore: API Test: Tests/WebKit2/MediaStreamTrackDetached.mm Move the definition of a MediaStream as a MediaProducer from the stream itself to its constituent MediaStreamTracks. This ensures that, even if a MediaStreamTrack is removed from its stream, the document (and thus the clients) are notified that media capture is still occurring. Though MediaStream is no longer a MediaProducer, it still uses the MediaProducer's state concept to determine when to fire events. However it's mediaState() implementation will be moved into MediaStreamTrack, and will instead simply bitwise-or together each of it's track's mediaState(). The MediaStream notifies the document that its state has changed asynchronously, so do the same for MediaStreamTrack (which reduces the number of calls to the client when changes all occur during a single run loop). Because the MediaStreamTrackPrivate may be started externally (not by the MediaStreamTrack directly), add a new client method that notifies observers when the track has been started, and the MediaStreamTrack will use this notification to update the document with it's new mediaState(). * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::~MediaStream): (WebCore::MediaStream::mediaState): (WebCore::MediaStream::statusDidChange): (WebCore::MediaStream::characteristicsChanged): (WebCore::MediaStream::pageMutedStateDidChange): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::pageMutedStateDidChange): (WebCore::MediaStreamTrack::mediaState): (WebCore::MediaStreamTrack::trackStarted): (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stop): (WebCore::MediaStreamTrack::document): * Modules/mediastream/MediaStreamTrack.h: (WebCore::MediaStreamTrack::source): * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::trackStarted): * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::sourceStarted): * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::start): * platform/mediastream/RealtimeMediaSource.h: Tools: * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: * TestWebKitAPI/Tests/WebKit2/MediaStreamTrackDetached.mm: Added. (-[MediaStreamTrackDetachedUIDelegate _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]): (-[MediaStreamTrackDetachedUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]): (-[MediaStreamTrackDetachedUIDelegate _webView:mediaCaptureStateDidChange:]): (TestWebKitAPI::TEST): * TestWebKitAPI/Tests/WebKit2/mediastreamtrack-detached.html: Added. Canonical link: https://commits.webkit.org/190350@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@218399 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-06-16 18:46:29 +00:00
}
WebRTC: Update the MediaStream API https://bugs.webkit.org/show_bug.cgi?id=146313 Reviewed by Eric Carlson. Source/WebCore: Update the MediaStream API (MediaStream, MediaStreamTrack and RealtimeMediaSource) to match the Media Capture and Stream specification [1]. Notable changes: Updated event handling to synchronously update corresponding state/attributes as events are dispatched. Removed 'new' state from MediaStreamTrack. A track is either 'live' or 'ended'. As a consequence 'started' event is also removed. MediaStreamTrack always has a source (disconnected source concept was removed from the spec). Therefore, more state can be kept at the source without going away. Calculate MediaStream.active internally, from the track set, instead of setting it externally. Updated RealtimeMediaSource Observer interface. Replaced MediaStream's separate audio and video track lists with a single track set (more aligned with spec). Updated MediaStream constructor to adopt instead of clone track arguments (or tracks from MediaStream argument). Removed MediaStreamTrack.getSources() and corresponding test (removed from spec). Test status: 3 added, 8 existing enabled (some updated) and 1 removed. [1] http://w3c.github.io/mediacapture-main/archives/20150523/getusermedia.html Tests: fast/mediastream/MediaStreamTrack-clone.html fast/mediastream/MediaStreamTrack-kind.html fast/mediastream/MediaStreamTrack-stop.html * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::contextDestroyed): (WebCore::MediaStream::trackDidEnd): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrackToPrivate): (WebCore::MediaStream::didRemoveTrackFromPrivate): (WebCore::MediaStream::internalAddTrack): (WebCore::MediaStream::internalRemoveTrack): (WebCore::MediaStream::scheduleActiveStateChange): (WebCore::MediaStream::activityEventTimerFired): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::~MediaStream): Deleted. (WebCore::MediaStream::registry): Deleted. (WebCore::MediaStream::addObserver): Deleted. (WebCore::MediaStream::removeObserver): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStream.idl: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::id): (WebCore::MediaStreamTrack::label): (WebCore::MediaStreamTrack::enabled): (WebCore::MediaStreamTrack::setEnabled): (WebCore::MediaStreamTrack::muted): (WebCore::MediaStreamTrack::readonly): (WebCore::MediaStreamTrack::remote): (WebCore::MediaStreamTrack::readyState): (WebCore::MediaStreamTrack::ended): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::getCapabilities): (WebCore::MediaStreamTrack::applyConstraints): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::stop): (WebCore::MediaStreamTrack::getConstraints): Deleted. (WebCore::MediaStreamTrack::addObserver): Deleted. (WebCore::MediaStreamTrack::removeObserver): Deleted. (WebCore::MediaStreamTrack::configureTrackRendering): Deleted. (WebCore::MediaStreamTrack::activeDOMObjectName): Deleted. (WebCore::MediaStreamTrack::canSuspendForPageCache): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: * Modules/mediastream/RTCPeerConnection.cpp: (WebCore::RTCPeerConnection::didRemoveRemoteStream): Deleted. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::didCreateStream): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::updateActiveState): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivate::active): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::type): (WebCore::MediaStreamTrackPrivate::applyConstraints): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::muted): Deleted. (WebCore::MediaStreamTrackPrivate::readonly): Deleted. (WebCore::MediaStreamTrackPrivate::remote): Deleted. (WebCore::MediaStreamTrackPrivate::constraints): Deleted. (WebCore::MediaStreamTrackPrivate::states): Deleted. (WebCore::MediaStreamTrackPrivate::capabilities): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::id): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::enabled): (WebCore::MediaStreamTrackPrivate::setClient): (WebCore::MediaStreamTrackPrivate::source): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::readonly): (WebCore::RealtimeMediaSource::stop): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::addObserver): Deleted. (WebCore::RealtimeMediaSource::removeObserver): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::stopped): (WebCore::RealtimeMediaSource::id): Deleted. (WebCore::RealtimeMediaSource::muted): Deleted. (WebCore::RealtimeMediaSource::setReadonly): Deleted. * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream): Deleted. * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): Deleted. LayoutTests: Test status: 3 added, 8 existing enabled (some updated) and 1 removed. * TestExpectations: * fast/mediastream/MediaStream-add-ended-tracks-expected.txt: * fast/mediastream/MediaStream-add-ended-tracks.html: * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: * fast/mediastream/MediaStream-add-remove-tracks.html: * fast/mediastream/MediaStream-add-tracks-to-inactive-stream.html: * fast/mediastream/MediaStream-clone-expected.txt: Added. * fast/mediastream/MediaStream-clone.html: * fast/mediastream/MediaStream-construct-with-ended-tracks-expected.txt: Added. * fast/mediastream/MediaStream-construct-with-ended-tracks.html: * fast/mediastream/MediaStream-getTracks-expected.txt: * fast/mediastream/MediaStream-getTracks.html: * fast/mediastream/MediaStreamConstructor.html: * fast/mediastream/MediaStreamTrack-clone-expected.txt: Added. * fast/mediastream/MediaStreamTrack-clone.html: Added. * fast/mediastream/MediaStreamTrack-getSources-expected.txt: Removed. * fast/mediastream/MediaStreamTrack-getSources.html: Removed. Tested method removed from spec. * fast/mediastream/MediaStreamTrack-kind-expected.txt: Added. * fast/mediastream/MediaStreamTrack-kind.html: Added. * fast/mediastream/MediaStreamTrack-stop-expected.txt: Added. * fast/mediastream/MediaStreamTrack-stop.html: Added. * fast/mediastream/MediaStreamTrackEvent-constructor-expected.txt: * fast/mediastream/MediaStreamTrackEvent-constructor.html: * fast/mediastream/resources/getUserMedia-helper.js: Added. (.reject): (getUserMedia): (defaultRejectOrCatch): * platform/gtk/TestExpectations: Canonical link: https://commits.webkit.org/164511@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@186081 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-06-29 19:52:21 +00:00
void MediaStreamTrackPrivate::sourceStopped()
[Mac MediaStream] implement AVFoundation backed MediaStreamSource https://bugs.webkit.org/show_bug.cgi?id=123316 Source/WebCore: Reviewed by Jer Noble No new tests, existing tests updated. * CMakeLists.txt: Add MediaStreamSourceStates.cpp. * Modules/mediastream/MediaSourceStates.cpp: (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates. (WebCore::MediaSourceStates::sourceType): Ditto. (WebCore::MediaSourceStates::facingMode): Ditto. * Modules/mediastream/MediaSourceStates.h: Ditto. * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addRemoteSource): (WebCore::MediaStream::removeRemoteSource): * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the private track do that. Change private track parameter to ref because it can't be NULL. (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto. (WebCore::MediaStreamTrack::setSource): Pass through to private track. (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::states): Ditto. (WebCore::MediaStreamTrack::capabilities): Ditto. (WebCore::MediaStreamTrack::applyConstraints): Ditto. (WebCore::MediaStreamTrack::stopProducingData): Ditto. (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't schedule an 'ended' event if called as a side effect of the stop() method having been called as per spec. (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged. (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged. (WebCore::MediaStreamTrack::stop): Pass through to private track. * Modules/mediastream/MediaStreamTrack.h: (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints. * WebCore.xcodeproj/project.pbxproj: Add new files. * bindings/js/JSMediaSourceStatesCustom.cpp: (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode is Unknown. * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and undefined method prototype. * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None. (WebCore::MediaStreamDescriptor::removeSource): Ditto. (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): * platform/mediastream/MediaStreamSource.cpp: (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes to Live, stopProducingData when it changes to Ended. (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers. (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled. (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have stopped, the spec says that track.stop() should permanently stop the track's source. * platform/mediastream/MediaStreamSource.h: (WebCore::MediaStreamSource::name): Make virtual so derived classes can override. (WebCore::MediaStreamSource::setName): Ditto. (WebCore::MediaStreamSource::readyState): Ditto. (WebCore::MediaStreamSource::enabled): Ditto. (WebCore::MediaStreamSource::muted): Ditto. (WebCore::MediaStreamSource::setReadonly): Ditto. (WebCore::MediaStreamSource::remote): Ditto. (WebCore::MediaStreamSource::setRemote): Ditto. (WebCore::MediaStreamSource::startProducingData): Added. (WebCore::MediaStreamSource::stopProducingData): Added. * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to its own file. * platform/mediastream/MediaStreamSourceStates.cpp: Added. (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the strings are available to platform code. (WebCore::MediaStreamSourceStates::sourceType): Ditto. * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr. (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables. (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer. (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer. (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client. (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source. (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged. (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source. (WebCore::MediaStreamTrackPrivate::states): Ditto. (WebCore::MediaStreamTrackPrivate::type): Ditto. (WebCore::MediaStreamTrackPrivate::capabilities): Ditto. (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto. (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes. (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query. (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/mac/AVAudioCaptureSource.h: Added. * platform/mediastream/mac/AVAudioCaptureSource.mm: Added. * platform/mediastream/mac/AVCaptureDeviceManager.h: Added. * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added. * platform/mediastream/mac/AVMediaCaptureSource.h: Added. * platform/mediastream/mac/AVMediaCaptureSource.mm: Added. * platform/mediastream/mac/AVVideoCaptureSource.h: Added. * platform/mediastream/mac/AVVideoCaptureSource.mm: Added. * platform/mediastream/mac/MediaStreamCenterMac.cpp: (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement. (WebCore::MediaStreamCenterMac::createMediaStream): Ditto. (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto. * platform/mock/MockMediaStreamCenter.cpp: (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes. (WebCore::MockMediaStreamCenter::createMediaStream): LayoutTests: Reviewed by Jer Noble. * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: Updated. * fast/mediastream/MediaStream-add-remove-tracks.html: Ditto. * fast/mediastream/MediaStreamConstructor-expected.txt: Ditto. * fast/mediastream/MediaStreamConstructor.html: Ditto. * fast/mediastream/MediaStreamTrack-getSources.html: Remove typo. * fast/mediastream/MediaStreamTrack-expected.txt: Updated results. * fast/mediastream/MediaStreamTrack.html: Update to test track.stop() behavior. Canonical link: https://commits.webkit.org/141590@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158220 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-29 20:48:21 +00:00
{
[MediaStream] Clean up MediaStream private interfaces https://bugs.webkit.org/show_bug.cgi?id=149381 Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrack): (WebCore::MediaStream::didRemoveTrack): (WebCore::MediaStream::registry): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::didAddTrackToPrivate): Deleted. (WebCore::MediaStream::didRemoveTrackFromPrivate): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamRegistry.cpp: (WebCore::MediaStreamRegistry::lookup): (WebCore::MediaStreamRegistry::MediaStreamRegistry): * Modules/mediastream/MediaStreamRegistry.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::removeObserver): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::trackStatesChanged): (WebCore::MediaStreamTrack::configureTrackRendering): * Modules/mediastream/MediaStreamTrack.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::supportsType): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::load): * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.h: * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.mm: (WebCore::MediaStreamPrivateAVFObjC::create): (WebCore::MediaStreamPrivateAVFObjC::MediaStreamPrivateAVFObjC): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::~MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivateClient::~MediaStreamPrivateClient): (WebCore::MediaStreamPrivate::id): (WebCore::MediaStreamPrivate::active): (WebCore::MediaStreamPrivate::MediaStreamPrivate): Deleted. (WebCore::MediaStreamPrivate::~MediaStreamPrivate): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceStatesChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::~Observer): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::startProducingData): (WebCore::MediaStreamTrackPrivate::stopProducingData): (WebCore::MediaStreamTrackPrivate::setMuted): (WebCore::MediaStreamTrackPrivateClient::~MediaStreamTrackPrivateClient): Deleted. (WebCore::MediaStreamTrackPrivate::setClient): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/MediaStreamTrackSourcesRequestClient.h: (WebCore::TrackSourceInfo::create): (WebCore::TrackSourceInfo::id): (WebCore::TrackSourceInfo::label): (WebCore::TrackSourceInfo::groupId): (WebCore::TrackSourceInfo::kind): (WebCore::TrackSourceInfo::TrackSourceInfo): (WebCore::TrackSourceInfo::deviceId): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::statesDidChanged): (WebCore::RealtimeMediaSource::readonly): * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::id): (WebCore::RealtimeMediaSource::persistentId): (WebCore::RealtimeMediaSource::setPersistentId): (WebCore::RealtimeMediaSource::type): (WebCore::RealtimeMediaSource::stopped): * platform/mediastream/RealtimeMediaSourceCenter.h: * platform/mediastream/mac/AVCaptureDeviceManager.mm: (WebCore::AVCaptureDeviceManager::getSourcesInfo): * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp: (WebCore::RealtimeMediaSourceCenterMac::~RealtimeMediaSourceCenterMac): (WebCore::RealtimeMediaSourceCenterMac::validateRequestConstraints): (WebCore::RealtimeMediaSourceCenterMac::createMediaStream): (WebCore::RealtimeMediaSourceCenterMac::getMediaStreamTrackSources): * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h: * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::~RealtimeMediaSourceCenterOwr): (WebCore::RealtimeMediaSourceCenterOwr::validateRequestConstraints): * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h: * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::registerMockRealtimeMediaSourceCenter): (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints): (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): (WebCore::MockRealtimeMediaSourceCenter::getMediaStreamTrackSources): * platform/mock/MockRealtimeMediaSourceCenter.h: Canonical link: https://commits.webkit.org/167504@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190072 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-09-21 20:09:51 +00:00
if (m_isEnded)
[Mac MediaStream] implement AVFoundation backed MediaStreamSource https://bugs.webkit.org/show_bug.cgi?id=123316 Source/WebCore: Reviewed by Jer Noble No new tests, existing tests updated. * CMakeLists.txt: Add MediaStreamSourceStates.cpp. * Modules/mediastream/MediaSourceStates.cpp: (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates. (WebCore::MediaSourceStates::sourceType): Ditto. (WebCore::MediaSourceStates::facingMode): Ditto. * Modules/mediastream/MediaSourceStates.h: Ditto. * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addRemoteSource): (WebCore::MediaStream::removeRemoteSource): * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the private track do that. Change private track parameter to ref because it can't be NULL. (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto. (WebCore::MediaStreamTrack::setSource): Pass through to private track. (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::states): Ditto. (WebCore::MediaStreamTrack::capabilities): Ditto. (WebCore::MediaStreamTrack::applyConstraints): Ditto. (WebCore::MediaStreamTrack::stopProducingData): Ditto. (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't schedule an 'ended' event if called as a side effect of the stop() method having been called as per spec. (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged. (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged. (WebCore::MediaStreamTrack::stop): Pass through to private track. * Modules/mediastream/MediaStreamTrack.h: (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints. * WebCore.xcodeproj/project.pbxproj: Add new files. * bindings/js/JSMediaSourceStatesCustom.cpp: (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode is Unknown. * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and undefined method prototype. * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None. (WebCore::MediaStreamDescriptor::removeSource): Ditto. (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): * platform/mediastream/MediaStreamSource.cpp: (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes to Live, stopProducingData when it changes to Ended. (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers. (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled. (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have stopped, the spec says that track.stop() should permanently stop the track's source. * platform/mediastream/MediaStreamSource.h: (WebCore::MediaStreamSource::name): Make virtual so derived classes can override. (WebCore::MediaStreamSource::setName): Ditto. (WebCore::MediaStreamSource::readyState): Ditto. (WebCore::MediaStreamSource::enabled): Ditto. (WebCore::MediaStreamSource::muted): Ditto. (WebCore::MediaStreamSource::setReadonly): Ditto. (WebCore::MediaStreamSource::remote): Ditto. (WebCore::MediaStreamSource::setRemote): Ditto. (WebCore::MediaStreamSource::startProducingData): Added. (WebCore::MediaStreamSource::stopProducingData): Added. * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to its own file. * platform/mediastream/MediaStreamSourceStates.cpp: Added. (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the strings are available to platform code. (WebCore::MediaStreamSourceStates::sourceType): Ditto. * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr. (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables. (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer. (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer. (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client. (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source. (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged. (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source. (WebCore::MediaStreamTrackPrivate::states): Ditto. (WebCore::MediaStreamTrackPrivate::type): Ditto. (WebCore::MediaStreamTrackPrivate::capabilities): Ditto. (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto. (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes. (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query. (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/mac/AVAudioCaptureSource.h: Added. * platform/mediastream/mac/AVAudioCaptureSource.mm: Added. * platform/mediastream/mac/AVCaptureDeviceManager.h: Added. * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added. * platform/mediastream/mac/AVMediaCaptureSource.h: Added. * platform/mediastream/mac/AVMediaCaptureSource.mm: Added. * platform/mediastream/mac/AVVideoCaptureSource.h: Added. * platform/mediastream/mac/AVVideoCaptureSource.mm: Added. * platform/mediastream/mac/MediaStreamCenterMac.cpp: (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement. (WebCore::MediaStreamCenterMac::createMediaStream): Ditto. (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto. * platform/mock/MockMediaStreamCenter.cpp: (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes. (WebCore::MockMediaStreamCenter::createMediaStream): LayoutTests: Reviewed by Jer Noble. * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: Updated. * fast/mediastream/MediaStream-add-remove-tracks.html: Ditto. * fast/mediastream/MediaStreamConstructor-expected.txt: Ditto. * fast/mediastream/MediaStreamConstructor.html: Ditto. * fast/mediastream/MediaStreamTrack-getSources.html: Remove typo. * fast/mediastream/MediaStreamTrack-expected.txt: Updated results. * fast/mediastream/MediaStreamTrack.html: Update to test track.stop() behavior. Canonical link: https://commits.webkit.org/141590@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158220 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-29 20:48:21 +00:00
return;
Add more MediaStream logging https://bugs.webkit.org/show_bug.cgi?id=223143 <rdar://problem/75380363> Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopTrack): (WebCore::MediaStreamTrack::trackStarted): (WebCore::MediaStreamTrack::trackEnded): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::createAudioSourceProvider): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::end): * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource): (WebCore::AVVideoCaptureSource::startProducingData): (WebCore::AVVideoCaptureSource::stopProducingData): (WebCore::AVVideoCaptureSource::shutdownCaptureSession): (WebCore::AVVideoCaptureSource::orientationChanged): Canonical link: https://commits.webkit.org/235243@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@274376 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-03-13 02:01:11 +00:00
ALWAYS_LOG(LOGIDENTIFIER);
WebRTC: Update the MediaStream API https://bugs.webkit.org/show_bug.cgi?id=146313 Reviewed by Eric Carlson. Source/WebCore: Update the MediaStream API (MediaStream, MediaStreamTrack and RealtimeMediaSource) to match the Media Capture and Stream specification [1]. Notable changes: Updated event handling to synchronously update corresponding state/attributes as events are dispatched. Removed 'new' state from MediaStreamTrack. A track is either 'live' or 'ended'. As a consequence 'started' event is also removed. MediaStreamTrack always has a source (disconnected source concept was removed from the spec). Therefore, more state can be kept at the source without going away. Calculate MediaStream.active internally, from the track set, instead of setting it externally. Updated RealtimeMediaSource Observer interface. Replaced MediaStream's separate audio and video track lists with a single track set (more aligned with spec). Updated MediaStream constructor to adopt instead of clone track arguments (or tracks from MediaStream argument). Removed MediaStreamTrack.getSources() and corresponding test (removed from spec). Test status: 3 added, 8 existing enabled (some updated) and 1 removed. [1] http://w3c.github.io/mediacapture-main/archives/20150523/getusermedia.html Tests: fast/mediastream/MediaStreamTrack-clone.html fast/mediastream/MediaStreamTrack-kind.html fast/mediastream/MediaStreamTrack-stop.html * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::contextDestroyed): (WebCore::MediaStream::trackDidEnd): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrackToPrivate): (WebCore::MediaStream::didRemoveTrackFromPrivate): (WebCore::MediaStream::internalAddTrack): (WebCore::MediaStream::internalRemoveTrack): (WebCore::MediaStream::scheduleActiveStateChange): (WebCore::MediaStream::activityEventTimerFired): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::~MediaStream): Deleted. (WebCore::MediaStream::registry): Deleted. (WebCore::MediaStream::addObserver): Deleted. (WebCore::MediaStream::removeObserver): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStream.idl: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::id): (WebCore::MediaStreamTrack::label): (WebCore::MediaStreamTrack::enabled): (WebCore::MediaStreamTrack::setEnabled): (WebCore::MediaStreamTrack::muted): (WebCore::MediaStreamTrack::readonly): (WebCore::MediaStreamTrack::remote): (WebCore::MediaStreamTrack::readyState): (WebCore::MediaStreamTrack::ended): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::getCapabilities): (WebCore::MediaStreamTrack::applyConstraints): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::stop): (WebCore::MediaStreamTrack::getConstraints): Deleted. (WebCore::MediaStreamTrack::addObserver): Deleted. (WebCore::MediaStreamTrack::removeObserver): Deleted. (WebCore::MediaStreamTrack::configureTrackRendering): Deleted. (WebCore::MediaStreamTrack::activeDOMObjectName): Deleted. (WebCore::MediaStreamTrack::canSuspendForPageCache): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: * Modules/mediastream/RTCPeerConnection.cpp: (WebCore::RTCPeerConnection::didRemoveRemoteStream): Deleted. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::didCreateStream): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::updateActiveState): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivate::active): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::type): (WebCore::MediaStreamTrackPrivate::applyConstraints): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::muted): Deleted. (WebCore::MediaStreamTrackPrivate::readonly): Deleted. (WebCore::MediaStreamTrackPrivate::remote): Deleted. (WebCore::MediaStreamTrackPrivate::constraints): Deleted. (WebCore::MediaStreamTrackPrivate::states): Deleted. (WebCore::MediaStreamTrackPrivate::capabilities): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::id): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::enabled): (WebCore::MediaStreamTrackPrivate::setClient): (WebCore::MediaStreamTrackPrivate::source): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::readonly): (WebCore::RealtimeMediaSource::stop): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::addObserver): Deleted. (WebCore::RealtimeMediaSource::removeObserver): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::stopped): (WebCore::RealtimeMediaSource::id): Deleted. (WebCore::RealtimeMediaSource::muted): Deleted. (WebCore::RealtimeMediaSource::setReadonly): Deleted. * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream): Deleted. * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): Deleted. LayoutTests: Test status: 3 added, 8 existing enabled (some updated) and 1 removed. * TestExpectations: * fast/mediastream/MediaStream-add-ended-tracks-expected.txt: * fast/mediastream/MediaStream-add-ended-tracks.html: * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: * fast/mediastream/MediaStream-add-remove-tracks.html: * fast/mediastream/MediaStream-add-tracks-to-inactive-stream.html: * fast/mediastream/MediaStream-clone-expected.txt: Added. * fast/mediastream/MediaStream-clone.html: * fast/mediastream/MediaStream-construct-with-ended-tracks-expected.txt: Added. * fast/mediastream/MediaStream-construct-with-ended-tracks.html: * fast/mediastream/MediaStream-getTracks-expected.txt: * fast/mediastream/MediaStream-getTracks.html: * fast/mediastream/MediaStreamConstructor.html: * fast/mediastream/MediaStreamTrack-clone-expected.txt: Added. * fast/mediastream/MediaStreamTrack-clone.html: Added. * fast/mediastream/MediaStreamTrack-getSources-expected.txt: Removed. * fast/mediastream/MediaStreamTrack-getSources.html: Removed. Tested method removed from spec. * fast/mediastream/MediaStreamTrack-kind-expected.txt: Added. * fast/mediastream/MediaStreamTrack-kind.html: Added. * fast/mediastream/MediaStreamTrack-stop-expected.txt: Added. * fast/mediastream/MediaStreamTrack-stop.html: Added. * fast/mediastream/MediaStreamTrackEvent-constructor-expected.txt: * fast/mediastream/MediaStreamTrackEvent-constructor.html: * fast/mediastream/resources/getUserMedia-helper.js: Added. (.reject): (getUserMedia): (defaultRejectOrCatch): * platform/gtk/TestExpectations: Canonical link: https://commits.webkit.org/164511@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@186081 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-06-29 19:52:21 +00:00
m_isEnded = true;
[MediaStream] Move paintCurrentFrameInContext from RealtimeMediaSources to MediaPlayer https://bugs.webkit.org/show_bug.cgi?id=169474 <rdar://problem/30976747> Reviewed by Youenn Fablet. Source/WebCore: Every video capture source has extremely similar code to render the current frame to a graphics context. Because the media player gets every video sample buffer, have it hang onto the most recent frame so it can implement paintCurrentFrameInContext directly. Fix an existing race condition that occasionally caused the readyState to advance to "have enough data" before a video was ready to paint by defining a MediaStreamTrackPrivate readyState and observing that. No new tests, covered by existing tests. These changes uncovered a bug in fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled.html, which was updated. * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp: (WebCore::CanvasCaptureMediaStreamTrack::Source::captureCanvas): (WebCore::CanvasCaptureMediaStreamTrack::Source::paintCurrentFrameInContext): Deleted. (WebCore::CanvasCaptureMediaStreamTrack::Source::currentFrameImage): Deleted. * Modules/mediastream/CanvasCaptureMediaStreamTrack.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]): Drive-by change - don't pass status to parent callback, it is a property of the layer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable): Drive-by cleanup - we don't use AVSampleBufferRenderSynchronizer so don't fail if it isn't available. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample): Hang onto new frame, invalidate cached image, update readyState. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::layerStatusDidChange): No more "updatePausedImage". (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer): Drive-by cleanup - Add an early return if there is no need for a layer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayer): renderingModeChanged -> updateRenderingMode. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Minor cleanup. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode): Renamed from renderingModeChanged, add a bool return to signal when the mode changes. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): No more m_haveEverPlayed. Update display mode immediately. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): No more paused image. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): Only return HaveNothing, HaveMetadata, or HaveEnoughData. Don't return HaveEnoughData until all enabled tracks are providing data and never drop back to HaveMetadata. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateRenderingMode): Renamed from renderingModeChanged. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged): Update intrinsic size directly. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated): No more m_hasReceivedMedia. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::readyStateChanged): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack): Reset imagePainter when active video track changes. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateCurrentFrameImage): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext): Paint current frame image. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::CurrentFramePainter::reset): New. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::shouldEnqueueVideoSampleBuffer): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updatePausedImage): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateIntrinsicSize): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::renderingModeChanged): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::audioSamplesAvailable): Deleted. * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::paintCurrentFrameInContext): Deleted. (WebCore::MediaStreamPrivate::currentFrameImage): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::endTrack): Update readyState. (WebCore::MediaStreamTrackPrivate::clone): Clone readyState. (WebCore::MediaStreamTrackPrivate::sourceStopped): Update readyState. (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): Ditto. (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): Ditto. (WebCore::MediaStreamTrackPrivate::updateReadyState): New, update readyState and notify observers. (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::currentFrameImage): Deleted. (WebCore::RealtimeMediaSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/AVMediaCaptureSource.mm: (-[WebCoreAVMediaCaptureSourceObserver disconnect]): Drive-by fix - clear m_callback after calling removeNotificationObservers. (-[WebCoreAVMediaCaptureSourceObserver removeNotificationObservers]): Drive-by fix - remove the correct listener. (-[WebCoreAVMediaCaptureSourceObserver endSessionInterrupted:]): * platform/mediastream/mac/AVVideoCaptureSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::currentFrameImage): Deleted. (WebCore::AVVideoCaptureSource::currentFrameCGImage): Deleted. (WebCore::AVVideoCaptureSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp: (WebCore::drawImage): Deleted. (WebCore::RealtimeIncomingVideoSource::currentFrameImage): Deleted. (WebCore::RealtimeIncomingVideoSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/RealtimeIncomingVideoSource.h: * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::paintCurrentFrameInContext): Deleted. (WebCore::MockRealtimeVideoSource::currentFrameImage): Deleted. * platform/mock/MockRealtimeVideoSource.h: LayoutTests: * fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled-expected.txt: * fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled.html: Fix bug uncovered by patch. Canonical link: https://commits.webkit.org/186577@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213880 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-14 00:30:48 +00:00
updateReadyState();
WebRTC: Update the MediaStream API https://bugs.webkit.org/show_bug.cgi?id=146313 Reviewed by Eric Carlson. Source/WebCore: Update the MediaStream API (MediaStream, MediaStreamTrack and RealtimeMediaSource) to match the Media Capture and Stream specification [1]. Notable changes: Updated event handling to synchronously update corresponding state/attributes as events are dispatched. Removed 'new' state from MediaStreamTrack. A track is either 'live' or 'ended'. As a consequence 'started' event is also removed. MediaStreamTrack always has a source (disconnected source concept was removed from the spec). Therefore, more state can be kept at the source without going away. Calculate MediaStream.active internally, from the track set, instead of setting it externally. Updated RealtimeMediaSource Observer interface. Replaced MediaStream's separate audio and video track lists with a single track set (more aligned with spec). Updated MediaStream constructor to adopt instead of clone track arguments (or tracks from MediaStream argument). Removed MediaStreamTrack.getSources() and corresponding test (removed from spec). Test status: 3 added, 8 existing enabled (some updated) and 1 removed. [1] http://w3c.github.io/mediacapture-main/archives/20150523/getusermedia.html Tests: fast/mediastream/MediaStreamTrack-clone.html fast/mediastream/MediaStreamTrack-kind.html fast/mediastream/MediaStreamTrack-stop.html * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::contextDestroyed): (WebCore::MediaStream::trackDidEnd): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrackToPrivate): (WebCore::MediaStream::didRemoveTrackFromPrivate): (WebCore::MediaStream::internalAddTrack): (WebCore::MediaStream::internalRemoveTrack): (WebCore::MediaStream::scheduleActiveStateChange): (WebCore::MediaStream::activityEventTimerFired): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::~MediaStream): Deleted. (WebCore::MediaStream::registry): Deleted. (WebCore::MediaStream::addObserver): Deleted. (WebCore::MediaStream::removeObserver): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStream.idl: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::id): (WebCore::MediaStreamTrack::label): (WebCore::MediaStreamTrack::enabled): (WebCore::MediaStreamTrack::setEnabled): (WebCore::MediaStreamTrack::muted): (WebCore::MediaStreamTrack::readonly): (WebCore::MediaStreamTrack::remote): (WebCore::MediaStreamTrack::readyState): (WebCore::MediaStreamTrack::ended): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::getCapabilities): (WebCore::MediaStreamTrack::applyConstraints): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::stop): (WebCore::MediaStreamTrack::getConstraints): Deleted. (WebCore::MediaStreamTrack::addObserver): Deleted. (WebCore::MediaStreamTrack::removeObserver): Deleted. (WebCore::MediaStreamTrack::configureTrackRendering): Deleted. (WebCore::MediaStreamTrack::activeDOMObjectName): Deleted. (WebCore::MediaStreamTrack::canSuspendForPageCache): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: * Modules/mediastream/RTCPeerConnection.cpp: (WebCore::RTCPeerConnection::didRemoveRemoteStream): Deleted. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::didCreateStream): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::updateActiveState): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivate::active): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::type): (WebCore::MediaStreamTrackPrivate::applyConstraints): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::muted): Deleted. (WebCore::MediaStreamTrackPrivate::readonly): Deleted. (WebCore::MediaStreamTrackPrivate::remote): Deleted. (WebCore::MediaStreamTrackPrivate::constraints): Deleted. (WebCore::MediaStreamTrackPrivate::states): Deleted. (WebCore::MediaStreamTrackPrivate::capabilities): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::id): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::enabled): (WebCore::MediaStreamTrackPrivate::setClient): (WebCore::MediaStreamTrackPrivate::source): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::readonly): (WebCore::RealtimeMediaSource::stop): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::addObserver): Deleted. (WebCore::RealtimeMediaSource::removeObserver): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::stopped): (WebCore::RealtimeMediaSource::id): Deleted. (WebCore::RealtimeMediaSource::muted): Deleted. (WebCore::RealtimeMediaSource::setReadonly): Deleted. * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream): Deleted. * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): Deleted. LayoutTests: Test status: 3 added, 8 existing enabled (some updated) and 1 removed. * TestExpectations: * fast/mediastream/MediaStream-add-ended-tracks-expected.txt: * fast/mediastream/MediaStream-add-ended-tracks.html: * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: * fast/mediastream/MediaStream-add-remove-tracks.html: * fast/mediastream/MediaStream-add-tracks-to-inactive-stream.html: * fast/mediastream/MediaStream-clone-expected.txt: Added. * fast/mediastream/MediaStream-clone.html: * fast/mediastream/MediaStream-construct-with-ended-tracks-expected.txt: Added. * fast/mediastream/MediaStream-construct-with-ended-tracks.html: * fast/mediastream/MediaStream-getTracks-expected.txt: * fast/mediastream/MediaStream-getTracks.html: * fast/mediastream/MediaStreamConstructor.html: * fast/mediastream/MediaStreamTrack-clone-expected.txt: Added. * fast/mediastream/MediaStreamTrack-clone.html: Added. * fast/mediastream/MediaStreamTrack-getSources-expected.txt: Removed. * fast/mediastream/MediaStreamTrack-getSources.html: Removed. Tested method removed from spec. * fast/mediastream/MediaStreamTrack-kind-expected.txt: Added. * fast/mediastream/MediaStreamTrack-kind.html: Added. * fast/mediastream/MediaStreamTrack-stop-expected.txt: Added. * fast/mediastream/MediaStreamTrack-stop.html: Added. * fast/mediastream/MediaStreamTrackEvent-constructor-expected.txt: * fast/mediastream/MediaStreamTrackEvent-constructor.html: * fast/mediastream/resources/getUserMedia-helper.js: Added. (.reject): (getUserMedia): (defaultRejectOrCatch): * platform/gtk/TestExpectations: Canonical link: https://commits.webkit.org/164511@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@186081 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-06-29 19:52:21 +00:00
Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable() https://bugs.webkit.org/show_bug.cgi?id=188097 <rdar://problem/42558823> Reviewed by Eric Carlson. Source/WebCore: Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable(). RealtimeMediaSource::audioSamplesAvailable() is called on a background thread but iterates over observers that may get destroyed concurrently on the main thread. To address the issue: - Introduce a Lock to protect m_observer accesses - Copy observers to a Vector before iterating over them * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::forEachObserver const): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::sampleBufferUpdated): (WebCore::MediaStreamTrackPrivate::Observer::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addObserver): (WebCore::RealtimeMediaSource::removeObserver): (WebCore::RealtimeMediaSource::forEachObserver const): (WebCore::RealtimeMediaSource::notifyMutedObservers const): (WebCore::RealtimeMediaSource::settingsDidChange): (WebCore::RealtimeMediaSource::videoSampleAvailable): (WebCore::RealtimeMediaSource::audioSamplesAvailable): (WebCore::RealtimeMediaSource::start): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::captureFailed): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp: (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable): * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: Source/WebKit: * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: Canonical link: https://commits.webkit.org/203253@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234334 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-07-27 22:33:52 +00:00
forEachObserver([this](auto& observer) {
observer.trackEnded(*this);
});
[Mac MediaStream] implement AVFoundation backed MediaStreamSource https://bugs.webkit.org/show_bug.cgi?id=123316 Source/WebCore: Reviewed by Jer Noble No new tests, existing tests updated. * CMakeLists.txt: Add MediaStreamSourceStates.cpp. * Modules/mediastream/MediaSourceStates.cpp: (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates. (WebCore::MediaSourceStates::sourceType): Ditto. (WebCore::MediaSourceStates::facingMode): Ditto. * Modules/mediastream/MediaSourceStates.h: Ditto. * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addRemoteSource): (WebCore::MediaStream::removeRemoteSource): * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the private track do that. Change private track parameter to ref because it can't be NULL. (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto. (WebCore::MediaStreamTrack::setSource): Pass through to private track. (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::states): Ditto. (WebCore::MediaStreamTrack::capabilities): Ditto. (WebCore::MediaStreamTrack::applyConstraints): Ditto. (WebCore::MediaStreamTrack::stopProducingData): Ditto. (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't schedule an 'ended' event if called as a side effect of the stop() method having been called as per spec. (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged. (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged. (WebCore::MediaStreamTrack::stop): Pass through to private track. * Modules/mediastream/MediaStreamTrack.h: (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints. * WebCore.xcodeproj/project.pbxproj: Add new files. * bindings/js/JSMediaSourceStatesCustom.cpp: (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode is Unknown. * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and undefined method prototype. * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None. (WebCore::MediaStreamDescriptor::removeSource): Ditto. (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): * platform/mediastream/MediaStreamSource.cpp: (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes to Live, stopProducingData when it changes to Ended. (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers. (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled. (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have stopped, the spec says that track.stop() should permanently stop the track's source. * platform/mediastream/MediaStreamSource.h: (WebCore::MediaStreamSource::name): Make virtual so derived classes can override. (WebCore::MediaStreamSource::setName): Ditto. (WebCore::MediaStreamSource::readyState): Ditto. (WebCore::MediaStreamSource::enabled): Ditto. (WebCore::MediaStreamSource::muted): Ditto. (WebCore::MediaStreamSource::setReadonly): Ditto. (WebCore::MediaStreamSource::remote): Ditto. (WebCore::MediaStreamSource::setRemote): Ditto. (WebCore::MediaStreamSource::startProducingData): Added. (WebCore::MediaStreamSource::stopProducingData): Added. * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to its own file. * platform/mediastream/MediaStreamSourceStates.cpp: Added. (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the strings are available to platform code. (WebCore::MediaStreamSourceStates::sourceType): Ditto. * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr. (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables. (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer. (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer. (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client. (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source. (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged. (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source. (WebCore::MediaStreamTrackPrivate::states): Ditto. (WebCore::MediaStreamTrackPrivate::type): Ditto. (WebCore::MediaStreamTrackPrivate::capabilities): Ditto. (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto. (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes. (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query. (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/mac/AVAudioCaptureSource.h: Added. * platform/mediastream/mac/AVAudioCaptureSource.mm: Added. * platform/mediastream/mac/AVCaptureDeviceManager.h: Added. * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added. * platform/mediastream/mac/AVMediaCaptureSource.h: Added. * platform/mediastream/mac/AVMediaCaptureSource.mm: Added. * platform/mediastream/mac/AVVideoCaptureSource.h: Added. * platform/mediastream/mac/AVVideoCaptureSource.mm: Added. * platform/mediastream/mac/MediaStreamCenterMac.cpp: (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement. (WebCore::MediaStreamCenterMac::createMediaStream): Ditto. (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto. * platform/mock/MockMediaStreamCenter.cpp: (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes. (WebCore::MockMediaStreamCenter::createMediaStream): LayoutTests: Reviewed by Jer Noble. * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: Updated. * fast/mediastream/MediaStream-add-remove-tracks.html: Ditto. * fast/mediastream/MediaStreamConstructor-expected.txt: Ditto. * fast/mediastream/MediaStreamConstructor.html: Ditto. * fast/mediastream/MediaStreamTrack-getSources.html: Remove typo. * fast/mediastream/MediaStreamTrack-expected.txt: Updated results. * fast/mediastream/MediaStreamTrack.html: Update to test track.stop() behavior. Canonical link: https://commits.webkit.org/141590@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158220 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-29 20:48:21 +00:00
}
WebRTC: Update the MediaStream API https://bugs.webkit.org/show_bug.cgi?id=146313 Reviewed by Eric Carlson. Source/WebCore: Update the MediaStream API (MediaStream, MediaStreamTrack and RealtimeMediaSource) to match the Media Capture and Stream specification [1]. Notable changes: Updated event handling to synchronously update corresponding state/attributes as events are dispatched. Removed 'new' state from MediaStreamTrack. A track is either 'live' or 'ended'. As a consequence 'started' event is also removed. MediaStreamTrack always has a source (disconnected source concept was removed from the spec). Therefore, more state can be kept at the source without going away. Calculate MediaStream.active internally, from the track set, instead of setting it externally. Updated RealtimeMediaSource Observer interface. Replaced MediaStream's separate audio and video track lists with a single track set (more aligned with spec). Updated MediaStream constructor to adopt instead of clone track arguments (or tracks from MediaStream argument). Removed MediaStreamTrack.getSources() and corresponding test (removed from spec). Test status: 3 added, 8 existing enabled (some updated) and 1 removed. [1] http://w3c.github.io/mediacapture-main/archives/20150523/getusermedia.html Tests: fast/mediastream/MediaStreamTrack-clone.html fast/mediastream/MediaStreamTrack-kind.html fast/mediastream/MediaStreamTrack-stop.html * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::contextDestroyed): (WebCore::MediaStream::trackDidEnd): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrackToPrivate): (WebCore::MediaStream::didRemoveTrackFromPrivate): (WebCore::MediaStream::internalAddTrack): (WebCore::MediaStream::internalRemoveTrack): (WebCore::MediaStream::scheduleActiveStateChange): (WebCore::MediaStream::activityEventTimerFired): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::~MediaStream): Deleted. (WebCore::MediaStream::registry): Deleted. (WebCore::MediaStream::addObserver): Deleted. (WebCore::MediaStream::removeObserver): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStream.idl: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::id): (WebCore::MediaStreamTrack::label): (WebCore::MediaStreamTrack::enabled): (WebCore::MediaStreamTrack::setEnabled): (WebCore::MediaStreamTrack::muted): (WebCore::MediaStreamTrack::readonly): (WebCore::MediaStreamTrack::remote): (WebCore::MediaStreamTrack::readyState): (WebCore::MediaStreamTrack::ended): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::getCapabilities): (WebCore::MediaStreamTrack::applyConstraints): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::stop): (WebCore::MediaStreamTrack::getConstraints): Deleted. (WebCore::MediaStreamTrack::addObserver): Deleted. (WebCore::MediaStreamTrack::removeObserver): Deleted. (WebCore::MediaStreamTrack::configureTrackRendering): Deleted. (WebCore::MediaStreamTrack::activeDOMObjectName): Deleted. (WebCore::MediaStreamTrack::canSuspendForPageCache): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: * Modules/mediastream/RTCPeerConnection.cpp: (WebCore::RTCPeerConnection::didRemoveRemoteStream): Deleted. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::didCreateStream): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::updateActiveState): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivate::active): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::type): (WebCore::MediaStreamTrackPrivate::applyConstraints): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::muted): Deleted. (WebCore::MediaStreamTrackPrivate::readonly): Deleted. (WebCore::MediaStreamTrackPrivate::remote): Deleted. (WebCore::MediaStreamTrackPrivate::constraints): Deleted. (WebCore::MediaStreamTrackPrivate::states): Deleted. (WebCore::MediaStreamTrackPrivate::capabilities): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::id): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::enabled): (WebCore::MediaStreamTrackPrivate::setClient): (WebCore::MediaStreamTrackPrivate::source): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::readonly): (WebCore::RealtimeMediaSource::stop): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::addObserver): Deleted. (WebCore::RealtimeMediaSource::removeObserver): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::stopped): (WebCore::RealtimeMediaSource::id): Deleted. (WebCore::RealtimeMediaSource::muted): Deleted. (WebCore::RealtimeMediaSource::setReadonly): Deleted. * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream): Deleted. * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): Deleted. LayoutTests: Test status: 3 added, 8 existing enabled (some updated) and 1 removed. * TestExpectations: * fast/mediastream/MediaStream-add-ended-tracks-expected.txt: * fast/mediastream/MediaStream-add-ended-tracks.html: * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: * fast/mediastream/MediaStream-add-remove-tracks.html: * fast/mediastream/MediaStream-add-tracks-to-inactive-stream.html: * fast/mediastream/MediaStream-clone-expected.txt: Added. * fast/mediastream/MediaStream-clone.html: * fast/mediastream/MediaStream-construct-with-ended-tracks-expected.txt: Added. * fast/mediastream/MediaStream-construct-with-ended-tracks.html: * fast/mediastream/MediaStream-getTracks-expected.txt: * fast/mediastream/MediaStream-getTracks.html: * fast/mediastream/MediaStreamConstructor.html: * fast/mediastream/MediaStreamTrack-clone-expected.txt: Added. * fast/mediastream/MediaStreamTrack-clone.html: Added. * fast/mediastream/MediaStreamTrack-getSources-expected.txt: Removed. * fast/mediastream/MediaStreamTrack-getSources.html: Removed. Tested method removed from spec. * fast/mediastream/MediaStreamTrack-kind-expected.txt: Added. * fast/mediastream/MediaStreamTrack-kind.html: Added. * fast/mediastream/MediaStreamTrack-stop-expected.txt: Added. * fast/mediastream/MediaStreamTrack-stop.html: Added. * fast/mediastream/MediaStreamTrackEvent-constructor-expected.txt: * fast/mediastream/MediaStreamTrackEvent-constructor.html: * fast/mediastream/resources/getUserMedia-helper.js: Added. (.reject): (getUserMedia): (defaultRejectOrCatch): * platform/gtk/TestExpectations: Canonical link: https://commits.webkit.org/164511@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@186081 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-06-29 19:52:21 +00:00
void MediaStreamTrackPrivate::sourceMutedChanged()
[Mac MediaStream] implement AVFoundation backed MediaStreamSource https://bugs.webkit.org/show_bug.cgi?id=123316 Source/WebCore: Reviewed by Jer Noble No new tests, existing tests updated. * CMakeLists.txt: Add MediaStreamSourceStates.cpp. * Modules/mediastream/MediaSourceStates.cpp: (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates. (WebCore::MediaSourceStates::sourceType): Ditto. (WebCore::MediaSourceStates::facingMode): Ditto. * Modules/mediastream/MediaSourceStates.h: Ditto. * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addRemoteSource): (WebCore::MediaStream::removeRemoteSource): * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the private track do that. Change private track parameter to ref because it can't be NULL. (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto. (WebCore::MediaStreamTrack::setSource): Pass through to private track. (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::states): Ditto. (WebCore::MediaStreamTrack::capabilities): Ditto. (WebCore::MediaStreamTrack::applyConstraints): Ditto. (WebCore::MediaStreamTrack::stopProducingData): Ditto. (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't schedule an 'ended' event if called as a side effect of the stop() method having been called as per spec. (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged. (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged. (WebCore::MediaStreamTrack::stop): Pass through to private track. * Modules/mediastream/MediaStreamTrack.h: (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints. * WebCore.xcodeproj/project.pbxproj: Add new files. * bindings/js/JSMediaSourceStatesCustom.cpp: (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode is Unknown. * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and undefined method prototype. * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None. (WebCore::MediaStreamDescriptor::removeSource): Ditto. (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): * platform/mediastream/MediaStreamSource.cpp: (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes to Live, stopProducingData when it changes to Ended. (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers. (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled. (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have stopped, the spec says that track.stop() should permanently stop the track's source. * platform/mediastream/MediaStreamSource.h: (WebCore::MediaStreamSource::name): Make virtual so derived classes can override. (WebCore::MediaStreamSource::setName): Ditto. (WebCore::MediaStreamSource::readyState): Ditto. (WebCore::MediaStreamSource::enabled): Ditto. (WebCore::MediaStreamSource::muted): Ditto. (WebCore::MediaStreamSource::setReadonly): Ditto. (WebCore::MediaStreamSource::remote): Ditto. (WebCore::MediaStreamSource::setRemote): Ditto. (WebCore::MediaStreamSource::startProducingData): Added. (WebCore::MediaStreamSource::stopProducingData): Added. * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to its own file. * platform/mediastream/MediaStreamSourceStates.cpp: Added. (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the strings are available to platform code. (WebCore::MediaStreamSourceStates::sourceType): Ditto. * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr. (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables. (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer. (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer. (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client. (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source. (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged. (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source. (WebCore::MediaStreamTrackPrivate::states): Ditto. (WebCore::MediaStreamTrackPrivate::type): Ditto. (WebCore::MediaStreamTrackPrivate::capabilities): Ditto. (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto. (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes. (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query. (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/mac/AVAudioCaptureSource.h: Added. * platform/mediastream/mac/AVAudioCaptureSource.mm: Added. * platform/mediastream/mac/AVCaptureDeviceManager.h: Added. * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added. * platform/mediastream/mac/AVMediaCaptureSource.h: Added. * platform/mediastream/mac/AVMediaCaptureSource.mm: Added. * platform/mediastream/mac/AVVideoCaptureSource.h: Added. * platform/mediastream/mac/AVVideoCaptureSource.mm: Added. * platform/mediastream/mac/MediaStreamCenterMac.cpp: (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement. (WebCore::MediaStreamCenterMac::createMediaStream): Ditto. (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto. * platform/mock/MockMediaStreamCenter.cpp: (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes. (WebCore::MockMediaStreamCenter::createMediaStream): LayoutTests: Reviewed by Jer Noble. * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: Updated. * fast/mediastream/MediaStream-add-remove-tracks.html: Ditto. * fast/mediastream/MediaStreamConstructor-expected.txt: Ditto. * fast/mediastream/MediaStreamConstructor.html: Ditto. * fast/mediastream/MediaStreamTrack-getSources.html: Remove typo. * fast/mediastream/MediaStreamTrack-expected.txt: Updated results. * fast/mediastream/MediaStreamTrack.html: Update to test track.stop() behavior. Canonical link: https://commits.webkit.org/141590@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158220 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-29 20:48:21 +00:00
{
Add more MediaStream logging https://bugs.webkit.org/show_bug.cgi?id=223143 <rdar://problem/75380363> Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopTrack): (WebCore::MediaStreamTrack::trackStarted): (WebCore::MediaStreamTrack::trackEnded): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::createAudioSourceProvider): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::end): * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource): (WebCore::AVVideoCaptureSource::startProducingData): (WebCore::AVVideoCaptureSource::stopProducingData): (WebCore::AVVideoCaptureSource::shutdownCaptureSession): (WebCore::AVVideoCaptureSource::orientationChanged): Canonical link: https://commits.webkit.org/235243@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@274376 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-03-13 02:01:11 +00:00
ALWAYS_LOG(LOGIDENTIFIER);
Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable() https://bugs.webkit.org/show_bug.cgi?id=188097 <rdar://problem/42558823> Reviewed by Eric Carlson. Source/WebCore: Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable(). RealtimeMediaSource::audioSamplesAvailable() is called on a background thread but iterates over observers that may get destroyed concurrently on the main thread. To address the issue: - Introduce a Lock to protect m_observer accesses - Copy observers to a Vector before iterating over them * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::forEachObserver const): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::sampleBufferUpdated): (WebCore::MediaStreamTrackPrivate::Observer::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addObserver): (WebCore::RealtimeMediaSource::removeObserver): (WebCore::RealtimeMediaSource::forEachObserver const): (WebCore::RealtimeMediaSource::notifyMutedObservers const): (WebCore::RealtimeMediaSource::settingsDidChange): (WebCore::RealtimeMediaSource::videoSampleAvailable): (WebCore::RealtimeMediaSource::audioSamplesAvailable): (WebCore::RealtimeMediaSource::start): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::captureFailed): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp: (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable): * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: Source/WebKit: * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: Canonical link: https://commits.webkit.org/203253@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234334 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-07-27 22:33:52 +00:00
forEachObserver([this](auto& observer) {
observer.trackMutedChanged(*this);
});
[MediaStream] Clean up MediaStream private interfaces https://bugs.webkit.org/show_bug.cgi?id=149381 Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrack): (WebCore::MediaStream::didRemoveTrack): (WebCore::MediaStream::registry): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::didAddTrackToPrivate): Deleted. (WebCore::MediaStream::didRemoveTrackFromPrivate): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamRegistry.cpp: (WebCore::MediaStreamRegistry::lookup): (WebCore::MediaStreamRegistry::MediaStreamRegistry): * Modules/mediastream/MediaStreamRegistry.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::removeObserver): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::trackStatesChanged): (WebCore::MediaStreamTrack::configureTrackRendering): * Modules/mediastream/MediaStreamTrack.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::supportsType): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::load): * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.h: * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.mm: (WebCore::MediaStreamPrivateAVFObjC::create): (WebCore::MediaStreamPrivateAVFObjC::MediaStreamPrivateAVFObjC): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::~MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivateClient::~MediaStreamPrivateClient): (WebCore::MediaStreamPrivate::id): (WebCore::MediaStreamPrivate::active): (WebCore::MediaStreamPrivate::MediaStreamPrivate): Deleted. (WebCore::MediaStreamPrivate::~MediaStreamPrivate): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceStatesChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::~Observer): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::startProducingData): (WebCore::MediaStreamTrackPrivate::stopProducingData): (WebCore::MediaStreamTrackPrivate::setMuted): (WebCore::MediaStreamTrackPrivateClient::~MediaStreamTrackPrivateClient): Deleted. (WebCore::MediaStreamTrackPrivate::setClient): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/MediaStreamTrackSourcesRequestClient.h: (WebCore::TrackSourceInfo::create): (WebCore::TrackSourceInfo::id): (WebCore::TrackSourceInfo::label): (WebCore::TrackSourceInfo::groupId): (WebCore::TrackSourceInfo::kind): (WebCore::TrackSourceInfo::TrackSourceInfo): (WebCore::TrackSourceInfo::deviceId): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::statesDidChanged): (WebCore::RealtimeMediaSource::readonly): * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::id): (WebCore::RealtimeMediaSource::persistentId): (WebCore::RealtimeMediaSource::setPersistentId): (WebCore::RealtimeMediaSource::type): (WebCore::RealtimeMediaSource::stopped): * platform/mediastream/RealtimeMediaSourceCenter.h: * platform/mediastream/mac/AVCaptureDeviceManager.mm: (WebCore::AVCaptureDeviceManager::getSourcesInfo): * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp: (WebCore::RealtimeMediaSourceCenterMac::~RealtimeMediaSourceCenterMac): (WebCore::RealtimeMediaSourceCenterMac::validateRequestConstraints): (WebCore::RealtimeMediaSourceCenterMac::createMediaStream): (WebCore::RealtimeMediaSourceCenterMac::getMediaStreamTrackSources): * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h: * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::~RealtimeMediaSourceCenterOwr): (WebCore::RealtimeMediaSourceCenterOwr::validateRequestConstraints): * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h: * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::registerMockRealtimeMediaSourceCenter): (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints): (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): (WebCore::MockRealtimeMediaSourceCenter::getMediaStreamTrackSources): * platform/mock/MockRealtimeMediaSourceCenter.h: Canonical link: https://commits.webkit.org/167504@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190072 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-09-21 20:09:51 +00:00
}
[MediaStream] Implement MediaStreamTrack.getSettings() https://bugs.webkit.org/show_bug.cgi?id=151727 Reviewed by Jer Noble. Source/WebCore: MediaStreamTrack.getStates has been replaced by MediaStreamTrack.getSettings. Test: fast/mediastream/MediaStreamTrack-getSettings.html * CMakeLists.txt: MediaSourceStates.* -> MediaSourceSettings.*. * DerivedSources.make: No more MediaSourceStates.idl. * Modules/mediastream/CapabilityRange.cpp: MediaSourceStates.* -> MediaSourceSettings.*. * Modules/mediastream/MediaSourceSettings.cpp: Copied from Source/WebCore/Modules/mediastream/MediaSourceStates.cpp. (WebCore::MediaSourceSettings::create): (WebCore::MediaSourceSettings::MediaSourceSettings): (WebCore::MediaSourceSettings::facingMode): (WebCore::MediaSourceStates::create): Deleted. (WebCore::MediaSourceStates::MediaSourceStates): Deleted. (WebCore::MediaSourceStates::sourceType): Deleted. (WebCore::MediaSourceStates::facingMode): Deleted. * Modules/mediastream/MediaSourceSettings.h: Copied from Source/WebCore/Modules/mediastream/MediaSourceStates.h. MediaSourceStates.* renamed to MediaSourceSettings.* and updated to new API. * Modules/mediastream/MediaSourceStates.cpp: Removed. * Modules/mediastream/MediaSourceStates.h: Removed. * Modules/mediastream/MediaSourceStates.idl: Removed. * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): Return an empty vector for now, will be fixed by the changes for https://bugs.webkit.org/show_bug.cgi?id=151728. (WebCore::MediaStreamCapabilities::sourceId): RealtimeMediaSourceStates -> MediaSourceSettings. (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::getSettings): New. (WebCore::MediaStreamTrack::getCapabilities): Don't modify states, just pass through whatever private track returns. (WebCore::MediaStreamTrack::trackSettingsChanged): (WebCore::MediaStreamTrack::states): Deleted. (WebCore::MediaStreamTrack::trackStatesChanged): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: MediaSourceStates -> MediaSourceSettings. * Modules/webaudio/MediaStreamAudioSource.cpp: (WebCore::MediaStreamAudioSource::settings): (WebCore::MediaStreamAudioSource::states): Deleted. * Modules/webaudio/MediaStreamAudioSource.h: MediaSourceStates -> MediaSourceSettings. * WebCore.xcodeproj/project.pbxproj: MediaSourceStates.* -> MediaSourceSettings.*. * bindings/js/JSMediaSourceStatesCustom.cpp: Removed. * bindings/js/JSMediaStreamTrackCustom.cpp: Added. (WebCore::JSMediaStreamTrack::getSettings): MediaSourceSettings is a generic dictionary so it has to be generated manually. * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::intrinsicSize): states -> settings. (WebCore::MediaStreamPrivate::trackStatesChanged): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::settings): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::states): Deleted. (WebCore::MediaStreamTrackPrivate::sourceStatesChanged): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::settingsDidChanged): (WebCore::RealtimeMediaSource::statesDidChanged): Deleted. * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/RealtimeMediaSourceCapabilities.h: (WebCore::RealtimeMediaSourceCapabilities::facingModes): States -> Settings. (WebCore::RealtimeMediaSourceCapabilities::addFacingMode): Ditto. (WebCore::RealtimeMediaSourceCapabilities::sourceTypes): Deleted. (WebCore::RealtimeMediaSourceCapabilities::setSourceType): Deleted. (WebCore::RealtimeMediaSourceCapabilities::addSourceType): Deleted. * platform/mediastream/RealtimeMediaSourceCenter.h: States -> Settings. * platform/mediastream/RealtimeMediaSourceSettings.cpp: Copied from Source/WebCore/platform/mediastream/RealtimeMediaSourceStates.cpp. (WebCore::RealtimeMediaSourceSettings::facingMode): (WebCore::RealtimeMediaSourceStates::facingMode): Deleted. (WebCore::RealtimeMediaSourceStates::sourceType): Deleted. * platform/mediastream/RealtimeMediaSourceSettings.h: Copied from Source/WebCore/platform/mediastream/RealtimeMediaSourceStates.h. * platform/mediastream/RealtimeMediaSourceStates.cpp: Removed. * platform/mediastream/RealtimeMediaSourceStates.h: Removed. * platform/mediastream/mac/AVAudioCaptureSource.h: * platform/mediastream/mac/AVAudioCaptureSource.mm: (WebCore::AVAudioCaptureSource::updateStates): Deleted. * platform/mediastream/mac/AVCaptureDeviceManager.h: * platform/mediastream/mac/AVCaptureDeviceManager.mm: * platform/mediastream/mac/AVMediaCaptureSource.h: * platform/mediastream/mac/AVMediaCaptureSource.mm: (WebCore::AVMediaCaptureSource::states): Deleted. * platform/mediastream/mac/AVVideoCaptureSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::updateStates): Deleted. * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm: * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h: * platform/mock/MockRealtimeAudioSource.cpp: (WebCore::MockRealtimeAudioSource::initializeSupportedConstraints): (WebCore::MockRealtimeAudioSource::updateStates): Deleted. * platform/mock/MockRealtimeAudioSource.h: * platform/mock/MockRealtimeMediaSource.cpp: (WebCore::MockRealtimeMediaSource::capabilities): Minor cleanup. (WebCore::MockRealtimeMediaSource::settings): (WebCore::MockRealtimeMediaSource::supportedConstraints): (WebCore::MockRealtimeMediaSource::states): Deleted. * platform/mock/MockRealtimeMediaSource.h: (WebCore::MockRealtimeMediaSource::constraints): (WebCore::MockRealtimeMediaSource::currentStates): Deleted. * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::updateSettings): (WebCore::MockRealtimeVideoSource::initializeCapabilities): (WebCore::MockRealtimeVideoSource::initializeSupportedConstraints): (WebCore::MockRealtimeVideoSource::setFrameRate): states -> settings. (WebCore::MockRealtimeVideoSource::setSize): Ditto. (WebCore::MockRealtimeVideoSource::drawAnimation): Ditto. (WebCore::MockRealtimeVideoSource::drawText): Ditto. (WebCore::MockRealtimeVideoSource::updateStates): Deleted. (WebCore::MockRealtimeVideoSource::setFacingMode): Deleted. * platform/mock/MockRealtimeVideoSource.h: LayoutTests: * fast/mediastream/MediaStream-video-element-expected.txt: * fast/mediastream/MediaStream-video-element-track-stop-expected.txt: * fast/mediastream/MediaStream-video-element-track-stop.html: * fast/mediastream/MediaStream-video-element.html: * fast/mediastream/MediaStreamTrack-getSettings-expected.txt: Added. * fast/mediastream/MediaStreamTrack-getSettings.html: Added. Canonical link: https://commits.webkit.org/169900@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@192954 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-12-02 20:20:37 +00:00
void MediaStreamTrackPrivate::sourceSettingsChanged()
[MediaStream] Clean up MediaStream private interfaces https://bugs.webkit.org/show_bug.cgi?id=149381 Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrack): (WebCore::MediaStream::didRemoveTrack): (WebCore::MediaStream::registry): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::didAddTrackToPrivate): Deleted. (WebCore::MediaStream::didRemoveTrackFromPrivate): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamRegistry.cpp: (WebCore::MediaStreamRegistry::lookup): (WebCore::MediaStreamRegistry::MediaStreamRegistry): * Modules/mediastream/MediaStreamRegistry.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::removeObserver): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::trackStatesChanged): (WebCore::MediaStreamTrack::configureTrackRendering): * Modules/mediastream/MediaStreamTrack.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::supportsType): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::load): * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.h: * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.mm: (WebCore::MediaStreamPrivateAVFObjC::create): (WebCore::MediaStreamPrivateAVFObjC::MediaStreamPrivateAVFObjC): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::~MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivateClient::~MediaStreamPrivateClient): (WebCore::MediaStreamPrivate::id): (WebCore::MediaStreamPrivate::active): (WebCore::MediaStreamPrivate::MediaStreamPrivate): Deleted. (WebCore::MediaStreamPrivate::~MediaStreamPrivate): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceStatesChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::~Observer): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::startProducingData): (WebCore::MediaStreamTrackPrivate::stopProducingData): (WebCore::MediaStreamTrackPrivate::setMuted): (WebCore::MediaStreamTrackPrivateClient::~MediaStreamTrackPrivateClient): Deleted. (WebCore::MediaStreamTrackPrivate::setClient): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/MediaStreamTrackSourcesRequestClient.h: (WebCore::TrackSourceInfo::create): (WebCore::TrackSourceInfo::id): (WebCore::TrackSourceInfo::label): (WebCore::TrackSourceInfo::groupId): (WebCore::TrackSourceInfo::kind): (WebCore::TrackSourceInfo::TrackSourceInfo): (WebCore::TrackSourceInfo::deviceId): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::statesDidChanged): (WebCore::RealtimeMediaSource::readonly): * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::id): (WebCore::RealtimeMediaSource::persistentId): (WebCore::RealtimeMediaSource::setPersistentId): (WebCore::RealtimeMediaSource::type): (WebCore::RealtimeMediaSource::stopped): * platform/mediastream/RealtimeMediaSourceCenter.h: * platform/mediastream/mac/AVCaptureDeviceManager.mm: (WebCore::AVCaptureDeviceManager::getSourcesInfo): * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp: (WebCore::RealtimeMediaSourceCenterMac::~RealtimeMediaSourceCenterMac): (WebCore::RealtimeMediaSourceCenterMac::validateRequestConstraints): (WebCore::RealtimeMediaSourceCenterMac::createMediaStream): (WebCore::RealtimeMediaSourceCenterMac::getMediaStreamTrackSources): * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h: * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::~RealtimeMediaSourceCenterOwr): (WebCore::RealtimeMediaSourceCenterOwr::validateRequestConstraints): * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h: * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::registerMockRealtimeMediaSourceCenter): (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints): (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): (WebCore::MockRealtimeMediaSourceCenter::getMediaStreamTrackSources): * platform/mock/MockRealtimeMediaSourceCenter.h: Canonical link: https://commits.webkit.org/167504@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190072 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-09-21 20:09:51 +00:00
{
Add more MediaStream logging https://bugs.webkit.org/show_bug.cgi?id=223143 <rdar://problem/75380363> Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopTrack): (WebCore::MediaStreamTrack::trackStarted): (WebCore::MediaStreamTrack::trackEnded): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::createAudioSourceProvider): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::end): * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource): (WebCore::AVVideoCaptureSource::startProducingData): (WebCore::AVVideoCaptureSource::stopProducingData): (WebCore::AVVideoCaptureSource::shutdownCaptureSession): (WebCore::AVVideoCaptureSource::orientationChanged): Canonical link: https://commits.webkit.org/235243@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@274376 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-03-13 02:01:11 +00:00
ALWAYS_LOG(LOGIDENTIFIER);
Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable() https://bugs.webkit.org/show_bug.cgi?id=188097 <rdar://problem/42558823> Reviewed by Eric Carlson. Source/WebCore: Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable(). RealtimeMediaSource::audioSamplesAvailable() is called on a background thread but iterates over observers that may get destroyed concurrently on the main thread. To address the issue: - Introduce a Lock to protect m_observer accesses - Copy observers to a Vector before iterating over them * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::forEachObserver const): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::sampleBufferUpdated): (WebCore::MediaStreamTrackPrivate::Observer::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addObserver): (WebCore::RealtimeMediaSource::removeObserver): (WebCore::RealtimeMediaSource::forEachObserver const): (WebCore::RealtimeMediaSource::notifyMutedObservers const): (WebCore::RealtimeMediaSource::settingsDidChange): (WebCore::RealtimeMediaSource::videoSampleAvailable): (WebCore::RealtimeMediaSource::audioSamplesAvailable): (WebCore::RealtimeMediaSource::start): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::captureFailed): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp: (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable): * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: Source/WebKit: * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: Canonical link: https://commits.webkit.org/203253@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234334 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-07-27 22:33:52 +00:00
forEachObserver([this](auto& observer) {
observer.trackSettingsChanged(*this);
});
[Mac MediaStream] implement AVFoundation backed MediaStreamSource https://bugs.webkit.org/show_bug.cgi?id=123316 Source/WebCore: Reviewed by Jer Noble No new tests, existing tests updated. * CMakeLists.txt: Add MediaStreamSourceStates.cpp. * Modules/mediastream/MediaSourceStates.cpp: (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates. (WebCore::MediaSourceStates::sourceType): Ditto. (WebCore::MediaSourceStates::facingMode): Ditto. * Modules/mediastream/MediaSourceStates.h: Ditto. * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addRemoteSource): (WebCore::MediaStream::removeRemoteSource): * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the private track do that. Change private track parameter to ref because it can't be NULL. (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto. (WebCore::MediaStreamTrack::setSource): Pass through to private track. (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::states): Ditto. (WebCore::MediaStreamTrack::capabilities): Ditto. (WebCore::MediaStreamTrack::applyConstraints): Ditto. (WebCore::MediaStreamTrack::stopProducingData): Ditto. (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't schedule an 'ended' event if called as a side effect of the stop() method having been called as per spec. (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged. (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged. (WebCore::MediaStreamTrack::stop): Pass through to private track. * Modules/mediastream/MediaStreamTrack.h: (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints. * WebCore.xcodeproj/project.pbxproj: Add new files. * bindings/js/JSMediaSourceStatesCustom.cpp: (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode is Unknown. * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and undefined method prototype. * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None. (WebCore::MediaStreamDescriptor::removeSource): Ditto. (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): * platform/mediastream/MediaStreamSource.cpp: (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes to Live, stopProducingData when it changes to Ended. (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers. (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled. (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have stopped, the spec says that track.stop() should permanently stop the track's source. * platform/mediastream/MediaStreamSource.h: (WebCore::MediaStreamSource::name): Make virtual so derived classes can override. (WebCore::MediaStreamSource::setName): Ditto. (WebCore::MediaStreamSource::readyState): Ditto. (WebCore::MediaStreamSource::enabled): Ditto. (WebCore::MediaStreamSource::muted): Ditto. (WebCore::MediaStreamSource::setReadonly): Ditto. (WebCore::MediaStreamSource::remote): Ditto. (WebCore::MediaStreamSource::setRemote): Ditto. (WebCore::MediaStreamSource::startProducingData): Added. (WebCore::MediaStreamSource::stopProducingData): Added. * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to its own file. * platform/mediastream/MediaStreamSourceStates.cpp: Added. (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the strings are available to platform code. (WebCore::MediaStreamSourceStates::sourceType): Ditto. * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr. (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables. (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer. (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer. (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client. (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source. (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged. (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source. (WebCore::MediaStreamTrackPrivate::states): Ditto. (WebCore::MediaStreamTrackPrivate::type): Ditto. (WebCore::MediaStreamTrackPrivate::capabilities): Ditto. (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto. (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes. (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query. (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/mac/AVAudioCaptureSource.h: Added. * platform/mediastream/mac/AVAudioCaptureSource.mm: Added. * platform/mediastream/mac/AVCaptureDeviceManager.h: Added. * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added. * platform/mediastream/mac/AVMediaCaptureSource.h: Added. * platform/mediastream/mac/AVMediaCaptureSource.mm: Added. * platform/mediastream/mac/AVVideoCaptureSource.h: Added. * platform/mediastream/mac/AVVideoCaptureSource.mm: Added. * platform/mediastream/mac/MediaStreamCenterMac.cpp: (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement. (WebCore::MediaStreamCenterMac::createMediaStream): Ditto. (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto. * platform/mock/MockMediaStreamCenter.cpp: (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes. (WebCore::MockMediaStreamCenter::createMediaStream): LayoutTests: Reviewed by Jer Noble. * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: Updated. * fast/mediastream/MediaStream-add-remove-tracks.html: Ditto. * fast/mediastream/MediaStreamConstructor-expected.txt: Ditto. * fast/mediastream/MediaStreamConstructor.html: Ditto. * fast/mediastream/MediaStreamTrack-getSources.html: Remove typo. * fast/mediastream/MediaStreamTrack-expected.txt: Updated results. * fast/mediastream/MediaStreamTrack.html: Update to test track.stop() behavior. Canonical link: https://commits.webkit.org/141590@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158220 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-29 20:48:21 +00:00
}
WebRTC: Update the MediaStream API https://bugs.webkit.org/show_bug.cgi?id=146313 Reviewed by Eric Carlson. Source/WebCore: Update the MediaStream API (MediaStream, MediaStreamTrack and RealtimeMediaSource) to match the Media Capture and Stream specification [1]. Notable changes: Updated event handling to synchronously update corresponding state/attributes as events are dispatched. Removed 'new' state from MediaStreamTrack. A track is either 'live' or 'ended'. As a consequence 'started' event is also removed. MediaStreamTrack always has a source (disconnected source concept was removed from the spec). Therefore, more state can be kept at the source without going away. Calculate MediaStream.active internally, from the track set, instead of setting it externally. Updated RealtimeMediaSource Observer interface. Replaced MediaStream's separate audio and video track lists with a single track set (more aligned with spec). Updated MediaStream constructor to adopt instead of clone track arguments (or tracks from MediaStream argument). Removed MediaStreamTrack.getSources() and corresponding test (removed from spec). Test status: 3 added, 8 existing enabled (some updated) and 1 removed. [1] http://w3c.github.io/mediacapture-main/archives/20150523/getusermedia.html Tests: fast/mediastream/MediaStreamTrack-clone.html fast/mediastream/MediaStreamTrack-kind.html fast/mediastream/MediaStreamTrack-stop.html * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::contextDestroyed): (WebCore::MediaStream::trackDidEnd): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrackToPrivate): (WebCore::MediaStream::didRemoveTrackFromPrivate): (WebCore::MediaStream::internalAddTrack): (WebCore::MediaStream::internalRemoveTrack): (WebCore::MediaStream::scheduleActiveStateChange): (WebCore::MediaStream::activityEventTimerFired): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::~MediaStream): Deleted. (WebCore::MediaStream::registry): Deleted. (WebCore::MediaStream::addObserver): Deleted. (WebCore::MediaStream::removeObserver): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStream.idl: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::id): (WebCore::MediaStreamTrack::label): (WebCore::MediaStreamTrack::enabled): (WebCore::MediaStreamTrack::setEnabled): (WebCore::MediaStreamTrack::muted): (WebCore::MediaStreamTrack::readonly): (WebCore::MediaStreamTrack::remote): (WebCore::MediaStreamTrack::readyState): (WebCore::MediaStreamTrack::ended): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::getCapabilities): (WebCore::MediaStreamTrack::applyConstraints): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::stop): (WebCore::MediaStreamTrack::getConstraints): Deleted. (WebCore::MediaStreamTrack::addObserver): Deleted. (WebCore::MediaStreamTrack::removeObserver): Deleted. (WebCore::MediaStreamTrack::configureTrackRendering): Deleted. (WebCore::MediaStreamTrack::activeDOMObjectName): Deleted. (WebCore::MediaStreamTrack::canSuspendForPageCache): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: * Modules/mediastream/RTCPeerConnection.cpp: (WebCore::RTCPeerConnection::didRemoveRemoteStream): Deleted. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::didCreateStream): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::updateActiveState): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivate::active): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::type): (WebCore::MediaStreamTrackPrivate::applyConstraints): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::muted): Deleted. (WebCore::MediaStreamTrackPrivate::readonly): Deleted. (WebCore::MediaStreamTrackPrivate::remote): Deleted. (WebCore::MediaStreamTrackPrivate::constraints): Deleted. (WebCore::MediaStreamTrackPrivate::states): Deleted. (WebCore::MediaStreamTrackPrivate::capabilities): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::id): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::enabled): (WebCore::MediaStreamTrackPrivate::setClient): (WebCore::MediaStreamTrackPrivate::source): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::readonly): (WebCore::RealtimeMediaSource::stop): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::addObserver): Deleted. (WebCore::RealtimeMediaSource::removeObserver): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::stopped): (WebCore::RealtimeMediaSource::id): Deleted. (WebCore::RealtimeMediaSource::muted): Deleted. (WebCore::RealtimeMediaSource::setReadonly): Deleted. * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream): Deleted. * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): Deleted. LayoutTests: Test status: 3 added, 8 existing enabled (some updated) and 1 removed. * TestExpectations: * fast/mediastream/MediaStream-add-ended-tracks-expected.txt: * fast/mediastream/MediaStream-add-ended-tracks.html: * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: * fast/mediastream/MediaStream-add-remove-tracks.html: * fast/mediastream/MediaStream-add-tracks-to-inactive-stream.html: * fast/mediastream/MediaStream-clone-expected.txt: Added. * fast/mediastream/MediaStream-clone.html: * fast/mediastream/MediaStream-construct-with-ended-tracks-expected.txt: Added. * fast/mediastream/MediaStream-construct-with-ended-tracks.html: * fast/mediastream/MediaStream-getTracks-expected.txt: * fast/mediastream/MediaStream-getTracks.html: * fast/mediastream/MediaStreamConstructor.html: * fast/mediastream/MediaStreamTrack-clone-expected.txt: Added. * fast/mediastream/MediaStreamTrack-clone.html: Added. * fast/mediastream/MediaStreamTrack-getSources-expected.txt: Removed. * fast/mediastream/MediaStreamTrack-getSources.html: Removed. Tested method removed from spec. * fast/mediastream/MediaStreamTrack-kind-expected.txt: Added. * fast/mediastream/MediaStreamTrack-kind.html: Added. * fast/mediastream/MediaStreamTrack-stop-expected.txt: Added. * fast/mediastream/MediaStreamTrack-stop.html: Added. * fast/mediastream/MediaStreamTrackEvent-constructor-expected.txt: * fast/mediastream/MediaStreamTrackEvent-constructor.html: * fast/mediastream/resources/getUserMedia-helper.js: Added. (.reject): (getUserMedia): (defaultRejectOrCatch): * platform/gtk/TestExpectations: Canonical link: https://commits.webkit.org/164511@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@186081 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-06-29 19:52:21 +00:00
bool MediaStreamTrackPrivate::preventSourceFromStopping()
[Mac MediaStream] implement AVFoundation backed MediaStreamSource https://bugs.webkit.org/show_bug.cgi?id=123316 Source/WebCore: Reviewed by Jer Noble No new tests, existing tests updated. * CMakeLists.txt: Add MediaStreamSourceStates.cpp. * Modules/mediastream/MediaSourceStates.cpp: (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates. (WebCore::MediaSourceStates::sourceType): Ditto. (WebCore::MediaSourceStates::facingMode): Ditto. * Modules/mediastream/MediaSourceStates.h: Ditto. * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addRemoteSource): (WebCore::MediaStream::removeRemoteSource): * Modules/mediastream/MediaStreamCapabilities.cpp: (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates (WebCore::MediaStreamCapabilities::facingMode): Ditto. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the private track do that. Change private track parameter to ref because it can't be NULL. (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto. (WebCore::MediaStreamTrack::setSource): Pass through to private track. (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::states): Ditto. (WebCore::MediaStreamTrack::capabilities): Ditto. (WebCore::MediaStreamTrack::applyConstraints): Ditto. (WebCore::MediaStreamTrack::stopProducingData): Ditto. (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't schedule an 'ended' event if called as a side effect of the stop() method having been called as per spec. (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged. (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged. (WebCore::MediaStreamTrack::stop): Pass through to private track. * Modules/mediastream/MediaStreamTrack.h: (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints. * WebCore.xcodeproj/project.pbxproj: Add new files. * bindings/js/JSMediaSourceStatesCustom.cpp: (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode is Unknown. * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and undefined method prototype. * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None. (WebCore::MediaStreamDescriptor::removeSource): Ditto. (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): * platform/mediastream/MediaStreamSource.cpp: (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes to Live, stopProducingData when it changes to Ended. (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers. (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled. (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have stopped, the spec says that track.stop() should permanently stop the track's source. * platform/mediastream/MediaStreamSource.h: (WebCore::MediaStreamSource::name): Make virtual so derived classes can override. (WebCore::MediaStreamSource::setName): Ditto. (WebCore::MediaStreamSource::readyState): Ditto. (WebCore::MediaStreamSource::enabled): Ditto. (WebCore::MediaStreamSource::muted): Ditto. (WebCore::MediaStreamSource::setReadonly): Ditto. (WebCore::MediaStreamSource::remote): Ditto. (WebCore::MediaStreamSource::setRemote): Ditto. (WebCore::MediaStreamSource::startProducingData): Added. (WebCore::MediaStreamSource::stopProducingData): Added. * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to its own file. * platform/mediastream/MediaStreamSourceStates.cpp: Added. (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the strings are available to platform code. (WebCore::MediaStreamSourceStates::sourceType): Ditto. * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr. (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables. (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer. (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer. (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client. (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source. (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged. (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source. (WebCore::MediaStreamTrackPrivate::states): Ditto. (WebCore::MediaStreamTrackPrivate::type): Ditto. (WebCore::MediaStreamTrackPrivate::capabilities): Ditto. (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto. (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes. (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query. (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/mac/AVAudioCaptureSource.h: Added. * platform/mediastream/mac/AVAudioCaptureSource.mm: Added. * platform/mediastream/mac/AVCaptureDeviceManager.h: Added. * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added. * platform/mediastream/mac/AVMediaCaptureSource.h: Added. * platform/mediastream/mac/AVMediaCaptureSource.mm: Added. * platform/mediastream/mac/AVVideoCaptureSource.h: Added. * platform/mediastream/mac/AVVideoCaptureSource.mm: Added. * platform/mediastream/mac/MediaStreamCenterMac.cpp: (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement. (WebCore::MediaStreamCenterMac::createMediaStream): Ditto. (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto. * platform/mock/MockMediaStreamCenter.cpp: (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes. (WebCore::MockMediaStreamCenter::createMediaStream): LayoutTests: Reviewed by Jer Noble. * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: Updated. * fast/mediastream/MediaStream-add-remove-tracks.html: Ditto. * fast/mediastream/MediaStreamConstructor-expected.txt: Ditto. * fast/mediastream/MediaStreamConstructor.html: Ditto. * fast/mediastream/MediaStreamTrack-getSources.html: Remove typo. * fast/mediastream/MediaStreamTrack-expected.txt: Updated results. * fast/mediastream/MediaStreamTrack.html: Update to test track.stop() behavior. Canonical link: https://commits.webkit.org/141590@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158220 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-29 20:48:21 +00:00
{
Add more MediaStream logging https://bugs.webkit.org/show_bug.cgi?id=223143 <rdar://problem/75380363> Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopTrack): (WebCore::MediaStreamTrack::trackStarted): (WebCore::MediaStreamTrack::trackEnded): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::createAudioSourceProvider): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::end): * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource): (WebCore::AVVideoCaptureSource::startProducingData): (WebCore::AVVideoCaptureSource::stopProducingData): (WebCore::AVVideoCaptureSource::shutdownCaptureSession): (WebCore::AVVideoCaptureSource::orientationChanged): Canonical link: https://commits.webkit.org/235243@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@274376 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-03-13 02:01:11 +00:00
ALWAYS_LOG(LOGIDENTIFIER, m_isEnded);
[MediaStream] VideoTrack should respond to MediaStreamTrack state changes https://bugs.webkit.org/show_bug.cgi?id=151299 Reviewed by Jer Noble. Source/WebCore: Test: fast/mediastream/MediaStream-video-element-track-stop.html * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::ended): Check m_ended. (WebCore::MediaStreamTrack::stopProducingData): Set m_ended before telling private track to stop so we won't fire an 'ended' event. (WebCore::MediaStreamTrack::trackEnded): Set m_ended, add comments from spec. * Modules/mediastream/MediaStreamTrack.h: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Live streams have infinite duration, not indefinite. * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformLayer): Return NULL when displayMode is None. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Calculate current displayMode based on MediaStream state. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode): Renamed from setPausedImageVisible, use m_displayMode. Don't start/stop clock, it makes more sense to do that in play and pause. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): Start clock. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): Stop clock. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): Call updateDisplayMode. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::activeStatusChanged): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateIntrinsicSize): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::createPreviewLayers): Always try to create both layers if necessary. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::renderingModeChanged): New, update displayMode and call back to the media element. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): Get rid of some unused locals. React to a change in the enabled video track. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext): Paint black when the active video track is disabled. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setPausedImageVisible): Deleted. * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::updateActiveState): Split the logic of updating the active video track out into updateActiveVideoTrack. (WebCore::MediaStreamPrivate::hasVideo): Check for track.ended. (WebCore::MediaStreamPrivate::hasAudio): Ditto. (WebCore::MediaStreamPrivate::paintCurrentFrameInContext): Don't call the source directly. (WebCore::MediaStreamPrivate::updateActiveVideoTrack): New. (WebCore::MediaStreamPrivate::trackEnabledChanged): Call updateActiveVideoTrack. (WebCore::MediaStreamPrivate::trackEnded): new. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::setEnabled): Call observers if enabled state changes. (WebCore::MediaStreamTrackPrivate::endTrack): Call observers. (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): New. (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): Add comments. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::paintCurrentFrameInContext): Remove a commented-out line. LayoutTests: * fast/mediastream/MediaStream-video-element-expected.txt: * fast/mediastream/MediaStream-video-element-track-stop-expected.txt: Added. * fast/mediastream/MediaStream-video-element-track-stop.html: Added. * fast/mediastream/MediaStream-video-element.html: * platform/gtk/TestExpectations: Skip new test. * platform/ios-simulator/TestExpectations: Ditto. * platform/mac-wk2/TestExpectations: Ditto. * platform/win/TestExpectations: Ditto. Canonical link: https://commits.webkit.org/169494@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@192503 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-11-17 02:52:16 +00:00
// Do not allow the source to stop if we are still using it.
WebRTC: Update the MediaStream API https://bugs.webkit.org/show_bug.cgi?id=146313 Reviewed by Eric Carlson. Source/WebCore: Update the MediaStream API (MediaStream, MediaStreamTrack and RealtimeMediaSource) to match the Media Capture and Stream specification [1]. Notable changes: Updated event handling to synchronously update corresponding state/attributes as events are dispatched. Removed 'new' state from MediaStreamTrack. A track is either 'live' or 'ended'. As a consequence 'started' event is also removed. MediaStreamTrack always has a source (disconnected source concept was removed from the spec). Therefore, more state can be kept at the source without going away. Calculate MediaStream.active internally, from the track set, instead of setting it externally. Updated RealtimeMediaSource Observer interface. Replaced MediaStream's separate audio and video track lists with a single track set (more aligned with spec). Updated MediaStream constructor to adopt instead of clone track arguments (or tracks from MediaStream argument). Removed MediaStreamTrack.getSources() and corresponding test (removed from spec). Test status: 3 added, 8 existing enabled (some updated) and 1 removed. [1] http://w3c.github.io/mediacapture-main/archives/20150523/getusermedia.html Tests: fast/mediastream/MediaStreamTrack-clone.html fast/mediastream/MediaStreamTrack-kind.html fast/mediastream/MediaStreamTrack-stop.html * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::create): (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::getTrackById): (WebCore::MediaStream::getAudioTracks): (WebCore::MediaStream::getVideoTracks): (WebCore::MediaStream::getTracks): (WebCore::MediaStream::contextDestroyed): (WebCore::MediaStream::trackDidEnd): (WebCore::MediaStream::activeStatusChanged): (WebCore::MediaStream::didAddTrackToPrivate): (WebCore::MediaStream::didRemoveTrackFromPrivate): (WebCore::MediaStream::internalAddTrack): (WebCore::MediaStream::internalRemoveTrack): (WebCore::MediaStream::scheduleActiveStateChange): (WebCore::MediaStream::activityEventTimerFired): (WebCore::MediaStream::trackVectorForType): (WebCore::MediaStream::~MediaStream): Deleted. (WebCore::MediaStream::registry): Deleted. (WebCore::MediaStream::addObserver): Deleted. (WebCore::MediaStream::removeObserver): Deleted. * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStream.idl: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): (WebCore::MediaStreamTrack::id): (WebCore::MediaStreamTrack::label): (WebCore::MediaStreamTrack::enabled): (WebCore::MediaStreamTrack::setEnabled): (WebCore::MediaStreamTrack::muted): (WebCore::MediaStreamTrack::readonly): (WebCore::MediaStreamTrack::remote): (WebCore::MediaStreamTrack::readyState): (WebCore::MediaStreamTrack::ended): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::getCapabilities): (WebCore::MediaStreamTrack::applyConstraints): (WebCore::MediaStreamTrack::trackEnded): (WebCore::MediaStreamTrack::trackMutedChanged): (WebCore::MediaStreamTrack::stop): (WebCore::MediaStreamTrack::getConstraints): Deleted. (WebCore::MediaStreamTrack::addObserver): Deleted. (WebCore::MediaStreamTrack::removeObserver): Deleted. (WebCore::MediaStreamTrack::configureTrackRendering): Deleted. (WebCore::MediaStreamTrack::activeDOMObjectName): Deleted. (WebCore::MediaStreamTrack::canSuspendForPageCache): Deleted. * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/MediaStreamTrack.idl: * Modules/mediastream/RTCPeerConnection.cpp: (WebCore::RTCPeerConnection::didRemoveRemoteStream): Deleted. * Modules/mediastream/UserMediaRequest.cpp: (WebCore::UserMediaRequest::didCreateStream): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::create): (WebCore::MediaStreamPrivate::MediaStreamPrivate): (WebCore::MediaStreamPrivate::tracks): (WebCore::MediaStreamPrivate::updateActiveState): (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): * platform/mediastream/MediaStreamPrivate.h: (WebCore::MediaStreamPrivate::active): Deleted. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::create): (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::label): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::type): (WebCore::MediaStreamTrackPrivate::applyConstraints): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::muted): Deleted. (WebCore::MediaStreamTrackPrivate::readonly): Deleted. (WebCore::MediaStreamTrackPrivate::remote): Deleted. (WebCore::MediaStreamTrackPrivate::constraints): Deleted. (WebCore::MediaStreamTrackPrivate::states): Deleted. (WebCore::MediaStreamTrackPrivate::capabilities): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::id): (WebCore::MediaStreamTrackPrivate::ended): (WebCore::MediaStreamTrackPrivate::enabled): (WebCore::MediaStreamTrackPrivate::setClient): (WebCore::MediaStreamTrackPrivate::source): Deleted. (WebCore::MediaStreamTrackPrivate::client): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::reset): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::readonly): (WebCore::RealtimeMediaSource::stop): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::addObserver): Deleted. (WebCore::RealtimeMediaSource::removeObserver): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::stopped): (WebCore::RealtimeMediaSource::id): Deleted. (WebCore::RealtimeMediaSource::muted): Deleted. (WebCore::RealtimeMediaSource::setReadonly): Deleted. * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream): Deleted. * platform/mock/MockRealtimeMediaSourceCenter.cpp: (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): Deleted. LayoutTests: Test status: 3 added, 8 existing enabled (some updated) and 1 removed. * TestExpectations: * fast/mediastream/MediaStream-add-ended-tracks-expected.txt: * fast/mediastream/MediaStream-add-ended-tracks.html: * fast/mediastream/MediaStream-add-remove-tracks-expected.txt: * fast/mediastream/MediaStream-add-remove-tracks.html: * fast/mediastream/MediaStream-add-tracks-to-inactive-stream.html: * fast/mediastream/MediaStream-clone-expected.txt: Added. * fast/mediastream/MediaStream-clone.html: * fast/mediastream/MediaStream-construct-with-ended-tracks-expected.txt: Added. * fast/mediastream/MediaStream-construct-with-ended-tracks.html: * fast/mediastream/MediaStream-getTracks-expected.txt: * fast/mediastream/MediaStream-getTracks.html: * fast/mediastream/MediaStreamConstructor.html: * fast/mediastream/MediaStreamTrack-clone-expected.txt: Added. * fast/mediastream/MediaStreamTrack-clone.html: Added. * fast/mediastream/MediaStreamTrack-getSources-expected.txt: Removed. * fast/mediastream/MediaStreamTrack-getSources.html: Removed. Tested method removed from spec. * fast/mediastream/MediaStreamTrack-kind-expected.txt: Added. * fast/mediastream/MediaStreamTrack-kind.html: Added. * fast/mediastream/MediaStreamTrack-stop-expected.txt: Added. * fast/mediastream/MediaStreamTrack-stop.html: Added. * fast/mediastream/MediaStreamTrackEvent-constructor-expected.txt: * fast/mediastream/MediaStreamTrackEvent-constructor.html: * fast/mediastream/resources/getUserMedia-helper.js: Added. (.reject): (getUserMedia): (defaultRejectOrCatch): * platform/gtk/TestExpectations: Canonical link: https://commits.webkit.org/164511@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@186081 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-06-29 19:52:21 +00:00
return !m_isEnded;
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
}
Introduce a RealtimeMediaSource video sample observer https://bugs.webkit.org/show_bug.cgi?id=211718 Reviewed by Eric Carlson. LayoutTests/imported/w3c: * web-platform-tests/mediacapture-streams/MediaStreamTrack-MediaElement-disabled-video-is-black.https-expected.txt: Drive-by fix, since we are now receiving samples but not rendering them when track is not enabled, the loadeddata event is fired appropriately. Update MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode to return PaintItBlack in that case. Source/WebCore: We introduce an observer dedicated to video samples similarly to AudioSampleObserver for audio. This will allow to move video frame processing out of the main thread progressively. For now, we remove video sample observing from the track private and observers should now register directly to the realtime media source. We update the various users, including MediaRecorder and the media player. In both cases, they will only observe the video track to be played/recorded, which is both more efficient and simpler. We introduced RealtimeMediaSource::Observer::hasStartedProducingData callback for MediaStreamTrackPrivate so that the processing to do when the first samples are available can be done on the main thread. MediaStreamTrackPrivate no longer filters out samples if it is not enabled. As such, each consumer is now responsible to observe/unobserve the source when its track gets enabled/disabled similarly as for audio, or do nothing if track is not enabled. Similarly, RealtimeOutgoingVideoSourceCocoa will now only observe video samples when the track is enabled and not muted. Covered by existing tests. * Modules/mediarecorder/MediaRecorder.cpp: (WebCore::MediaRecorder::sampleBufferUpdated): Deleted. * Modules/mediarecorder/MediaRecorder.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample): We can renove the track check since we only observe the active video track. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated): Deleted. * platform/mediarecorder/MediaRecorderPrivate.h: (WebCore::MediaRecorderPrivate::setVideoSource): (WebCore::MediaRecorderPrivate::~MediaRecorderPrivate): * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp: (WebCore::MediaRecorderPrivateAVFImpl::create): (WebCore::MediaRecorderPrivateAVFImpl::~MediaRecorderPrivateAVFImpl): (WebCore::MediaRecorderPrivateAVFImpl::videoSampleAvailable): (WebCore::MediaRecorderPrivateAVFImpl::stopRecording): (WebCore::MediaRecorderPrivateAVFImpl::sampleBufferUpdated): Deleted. * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h: * platform/mediarecorder/MediaRecorderPrivateMock.cpp: (WebCore::MediaRecorderPrivateMock::MediaRecorderPrivateMock): (WebCore::MediaRecorderPrivateMock::~MediaRecorderPrivateMock): (WebCore::MediaRecorderPrivateMock::stopRecording): (WebCore::MediaRecorderPrivateMock::videoSampleAvailable): (WebCore::MediaRecorderPrivateMock::sampleBufferUpdated): Deleted. * platform/mediarecorder/MediaRecorderPrivateMock.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): Deleted. (WebCore::MediaStreamTrackPrivate::hasStartedProducingAudioData): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addVideoSampleObserver): (WebCore::RealtimeMediaSource::removeVideoSampleObserver): (WebCore::RealtimeMediaSource::updateHasStartedProducingData): (WebCore::RealtimeMediaSource::videoSampleAvailable): (WebCore::RealtimeMediaSource::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/RealtimeOutgoingVideoSource.cpp: (WebCore::RealtimeOutgoingVideoSource::unobserveSource): (WebCore::RealtimeOutgoingVideoSource::updateBlackFramesSending): * platform/mediastream/RealtimeOutgoingVideoSource.h: * platform/mediastream/RealtimeVideoSource.cpp: (WebCore::RealtimeVideoSource::~RealtimeVideoSource): (WebCore::RealtimeVideoSource::startProducingData): (WebCore::RealtimeVideoSource::stopProducingData): (WebCore::RealtimeVideoSource::videoSampleAvailable): * platform/mediastream/RealtimeVideoSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection): * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.h: * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm: (WebCore::RealtimeIncomingVideoSourceCocoa::processNewSample): * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp: (WebCore::RealtimeOutgoingVideoSourceCocoa::videoSampleAvailable): (WebCore::RealtimeOutgoingVideoSourceCocoa::sampleBufferUpdated): Deleted. * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.h: * platform/mock/MockRealtimeVideoSource.cpp: * testing/Internals.cpp: (WebCore::Internals::~Internals): (WebCore::Internals::stopObservingRealtimeMediaSource): (WebCore::Internals::observeMediaStreamTrack): * testing/Internals.h: Source/WebKit: * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::SourceProxy::SourceProxy): (WebKit::UserMediaCaptureManagerProxy::SourceProxy::~SourceProxy): * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp: (WebKit::MediaRecorderPrivate::MediaRecorderPrivate): (WebKit::MediaRecorderPrivate::~MediaRecorderPrivate): (WebKit::MediaRecorderPrivate::videoSampleAvailable): (WebKit::MediaRecorderPrivate::stopRecording): (WebKit::MediaRecorderPrivate::sampleBufferUpdated): Deleted. * WebProcess/GPU/webrtc/MediaRecorderPrivate.h: Canonical link: https://commits.webkit.org/224671@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@261553 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-05-12 11:45:25 +00:00
void MediaStreamTrackPrivate::hasStartedProducingData()
HTMLVideoElement frames do not update on iOS when src is a MediaStream blob https://bugs.webkit.org/show_bug.cgi?id=159833 <rdar://problem/27379487> Patch by George Ruan <gruan@apple.com> on 2016-07-26 Reviewed by Eric Carlson. Source/WebCore: Test: fast/mediastream/MediaStream-video-element-displays-buffer.html * WebCore.xcodeproj/project.pbxproj: * platform/cf/CoreMediaSoftLink.cpp: Add CMSampleBufferCreateReadyWithImageBuffer and CMVideoFormatDescriptionCreateForImageBuffer softlink. * platform/cf/CoreMediaSoftLink.h: Ditto. * platform/cocoa/CoreVideoSoftLink.cpp: Add CVPixelBufferCreate, kCVPixelBufferCGBitmapContextCompatibilityKey, and kCVPixelBufferCGImageCompatibilityKey. * platform/cocoa/CoreVideoSoftLink.h: Ditto. * platform/graphics/avfoundation/MediaSampleAVFObjC.h: Change create to return a Ref<T> instead of RefPtr<T>. * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: Make observer of MediaStreamTrackPrivate and make MediaPlayer use an AVSampleBufferDisplayLayer instead of CALayer. * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC): Clean up observers and AVSampleBufferDisplayLayer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable): Ensures AVSampleBufferDisplayLayer is available. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueAudioSampleBufferFromTrack): Placeholder. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSampleBufferFromTrack): Responsible for enqueuing sample buffers to the active video track. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer): Ensures that an AVSampleBufferDisplayLayer exists. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayer): Destroys the AVSampleBufferDisplayLayer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformLayer): Replace CALayer with AVSampleBufferDisplayLayer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): Call updateReadyState as a deferred task. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): readyState is bumped to HAVE_ENOUGH_DATA only when the MediaPlayerPrivateMediaStreamAVFObjC has received a media sample. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated): Called from MediaStreamTrackPrivate when a new SampleBuffer is available. (WebCore::updateTracksOfType): Manage adding and removing self as observer from tracks. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): Replace CALayer with AVSampleBufferDisplayLayer (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::acceleratedRenderingStateChanged): Copied from MediaPlayerPrivateMediaSourceAVFObjC.mm (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::load): Deleted CALayer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode): Deleted process of updating CALayer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateIntrinsicSize): Deleted CALayer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::createPreviewLayers): Deleted. * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::updateActiveVideoTrack): Remove redundant check. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::sourceHasMoreMediaData): Called from RealtimeMediaSource when a new SampleBuffer is available. * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::sampleBufferUpdated): Relays to MediaPlayerPrivateMediaStreamAVFObjC that a new SampleBuffer is available to enqueue to the AVSampleBufferDisplayLayer. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::settingsDidChange): Fix grammatical mistake in function name settingsDidChanged(). (WebCore::RealtimeMediaSource::mediaDataUpdated): Relays to all observers that a new SampleBuffer is available. (WebCore::RealtimeMediaSource::settingsDidChanged): Deleted. * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::processNewFrame): Calls mediaDataUpdated when a new SampleBuffer is captured. * platform/mediastream/mac/MockRealtimeVideoSourceMac.h: * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm: (WebCore::MockRealtimeVideoSourceMac::CMSampleBufferFromPixelBuffer): Convert CVPixelBuffer to CMSampleBuffer. (WebCore::MockRealtimeVideoSourceMac::pixelBufferFromCGImage): Convert CGImage to CVPixelBuffer. (WebCore::MockRealtimeVideoSourceMac::updateSampleBuffer): Creates a CMSampleBuffer from current imageBuffer and sends the CMSampleBuffer to MediaPlayerPrivateMediaStreamAVFObjC * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::setFrameRate): Fix grammar of settingsDidChanged() to settingsDidChange(). (WebCore::MockRealtimeVideoSource::setSize): Ditto. (WebCore::MockRealtimeVideoSource::generateFrame): Call updateSampleBuffer(). * platform/mock/MockRealtimeVideoSource.h: Change elapsedTime() from private to protected. (WebCore::MockRealtimeVideoSource::updateSampleBuffer): Overriden by MockRealtimeVideoSourceMac. LayoutTests: * fast/mediastream/MediaStream-video-element-displays-buffer-expected.txt: Added. * fast/mediastream/MediaStream-video-element-displays-buffer.html: Added. Checks that a video element with a mediastream source displays frames that are neither black or transparent. * fast/mediastream/resources/getUserMedia-helper.js: (setupVideoElementWithStream): Sets up video element with global variable mediastream. Canonical link: https://commits.webkit.org/178368@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@203739 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-07-26 21:52:27 +00:00
{
MediaStreamTrackPrivate should always call readyStateChanged on the main thread https://bugs.webkit.org/show_bug.cgi?id=199538 <rdar://problem/52709106> Reviewed by Eric Carlson. MediaStreamTrackPrivate is sometimes calling readyStateChanged in a background thread inside its audioSamplesAvailable method. Instead of doing that, we hop to the main thread to call readyStateChanged. Once the call is made in the main thread, MediaStreamTrackPrivate will send the audio samples to its observers. To make mock audio source closer to real capture audio sources, audioSamplesAvailable is called on a background thread. RealtimeMediaSource is updated to always be destroyed in the main run loop since it is WebKit2 only. Covered by existing tests and making sure the mock audio source calls the audioSamplesAvailable method on a background thread. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::scheduleDeferredTask): scheduleDeferredTask may be called from a background thread. It is thus safer to ref the source instead of creating a weak pointer. * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm: (WebCore::MockRealtimeAudioSourceMac::MockRealtimeAudioSourceMac): (WebCore::MockRealtimeAudioSourceMac::emitSampleBuffers): (WebCore::MockRealtimeAudioSourceMac::reconfigure): (WebCore::MockRealtimeAudioSourceMac::render): (WebCore::MockRealtimeAudioSourceMac::settingsDidChange): * platform/mock/MockRealtimeAudioSource.cpp: (WebCore::MockRealtimeAudioSource::MockRealtimeAudioSource): (WebCore::MockRealtimeAudioSource::tick): * platform/mock/MockRealtimeAudioSource.h: Canonical link: https://commits.webkit.org/213468@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@247211 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-07-08 17:46:27 +00:00
ASSERT(isMainThread());
Introduce a RealtimeMediaSource video sample observer https://bugs.webkit.org/show_bug.cgi?id=211718 Reviewed by Eric Carlson. LayoutTests/imported/w3c: * web-platform-tests/mediacapture-streams/MediaStreamTrack-MediaElement-disabled-video-is-black.https-expected.txt: Drive-by fix, since we are now receiving samples but not rendering them when track is not enabled, the loadeddata event is fired appropriately. Update MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode to return PaintItBlack in that case. Source/WebCore: We introduce an observer dedicated to video samples similarly to AudioSampleObserver for audio. This will allow to move video frame processing out of the main thread progressively. For now, we remove video sample observing from the track private and observers should now register directly to the realtime media source. We update the various users, including MediaRecorder and the media player. In both cases, they will only observe the video track to be played/recorded, which is both more efficient and simpler. We introduced RealtimeMediaSource::Observer::hasStartedProducingData callback for MediaStreamTrackPrivate so that the processing to do when the first samples are available can be done on the main thread. MediaStreamTrackPrivate no longer filters out samples if it is not enabled. As such, each consumer is now responsible to observe/unobserve the source when its track gets enabled/disabled similarly as for audio, or do nothing if track is not enabled. Similarly, RealtimeOutgoingVideoSourceCocoa will now only observe video samples when the track is enabled and not muted. Covered by existing tests. * Modules/mediarecorder/MediaRecorder.cpp: (WebCore::MediaRecorder::sampleBufferUpdated): Deleted. * Modules/mediarecorder/MediaRecorder.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample): We can renove the track check since we only observe the active video track. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated): Deleted. * platform/mediarecorder/MediaRecorderPrivate.h: (WebCore::MediaRecorderPrivate::setVideoSource): (WebCore::MediaRecorderPrivate::~MediaRecorderPrivate): * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp: (WebCore::MediaRecorderPrivateAVFImpl::create): (WebCore::MediaRecorderPrivateAVFImpl::~MediaRecorderPrivateAVFImpl): (WebCore::MediaRecorderPrivateAVFImpl::videoSampleAvailable): (WebCore::MediaRecorderPrivateAVFImpl::stopRecording): (WebCore::MediaRecorderPrivateAVFImpl::sampleBufferUpdated): Deleted. * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h: * platform/mediarecorder/MediaRecorderPrivateMock.cpp: (WebCore::MediaRecorderPrivateMock::MediaRecorderPrivateMock): (WebCore::MediaRecorderPrivateMock::~MediaRecorderPrivateMock): (WebCore::MediaRecorderPrivateMock::stopRecording): (WebCore::MediaRecorderPrivateMock::videoSampleAvailable): (WebCore::MediaRecorderPrivateMock::sampleBufferUpdated): Deleted. * platform/mediarecorder/MediaRecorderPrivateMock.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): Deleted. (WebCore::MediaStreamTrackPrivate::hasStartedProducingAudioData): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addVideoSampleObserver): (WebCore::RealtimeMediaSource::removeVideoSampleObserver): (WebCore::RealtimeMediaSource::updateHasStartedProducingData): (WebCore::RealtimeMediaSource::videoSampleAvailable): (WebCore::RealtimeMediaSource::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/RealtimeOutgoingVideoSource.cpp: (WebCore::RealtimeOutgoingVideoSource::unobserveSource): (WebCore::RealtimeOutgoingVideoSource::updateBlackFramesSending): * platform/mediastream/RealtimeOutgoingVideoSource.h: * platform/mediastream/RealtimeVideoSource.cpp: (WebCore::RealtimeVideoSource::~RealtimeVideoSource): (WebCore::RealtimeVideoSource::startProducingData): (WebCore::RealtimeVideoSource::stopProducingData): (WebCore::RealtimeVideoSource::videoSampleAvailable): * platform/mediastream/RealtimeVideoSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection): * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.h: * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm: (WebCore::RealtimeIncomingVideoSourceCocoa::processNewSample): * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp: (WebCore::RealtimeOutgoingVideoSourceCocoa::videoSampleAvailable): (WebCore::RealtimeOutgoingVideoSourceCocoa::sampleBufferUpdated): Deleted. * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.h: * platform/mock/MockRealtimeVideoSource.cpp: * testing/Internals.cpp: (WebCore::Internals::~Internals): (WebCore::Internals::stopObservingRealtimeMediaSource): (WebCore::Internals::observeMediaStreamTrack): * testing/Internals.h: Source/WebKit: * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::SourceProxy::SourceProxy): (WebKit::UserMediaCaptureManagerProxy::SourceProxy::~SourceProxy): * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp: (WebKit::MediaRecorderPrivate::MediaRecorderPrivate): (WebKit::MediaRecorderPrivate::~MediaRecorderPrivate): (WebKit::MediaRecorderPrivate::videoSampleAvailable): (WebKit::MediaRecorderPrivate::stopRecording): (WebKit::MediaRecorderPrivate::sampleBufferUpdated): Deleted. * WebProcess/GPU/webrtc/MediaRecorderPrivate.h: Canonical link: https://commits.webkit.org/224671@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@261553 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-05-12 11:45:25 +00:00
if (m_hasStartedProducingData)
MediaStreamTrackPrivate should always call readyStateChanged on the main thread https://bugs.webkit.org/show_bug.cgi?id=199538 <rdar://problem/52709106> Reviewed by Eric Carlson. MediaStreamTrackPrivate is sometimes calling readyStateChanged in a background thread inside its audioSamplesAvailable method. Instead of doing that, we hop to the main thread to call readyStateChanged. Once the call is made in the main thread, MediaStreamTrackPrivate will send the audio samples to its observers. To make mock audio source closer to real capture audio sources, audioSamplesAvailable is called on a background thread. RealtimeMediaSource is updated to always be destroyed in the main run loop since it is WebKit2 only. Covered by existing tests and making sure the mock audio source calls the audioSamplesAvailable method on a background thread. * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::scheduleDeferredTask): scheduleDeferredTask may be called from a background thread. It is thus safer to ref the source instead of creating a weak pointer. * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm: (WebCore::MockRealtimeAudioSourceMac::MockRealtimeAudioSourceMac): (WebCore::MockRealtimeAudioSourceMac::emitSampleBuffers): (WebCore::MockRealtimeAudioSourceMac::reconfigure): (WebCore::MockRealtimeAudioSourceMac::render): (WebCore::MockRealtimeAudioSourceMac::settingsDidChange): * platform/mock/MockRealtimeAudioSource.cpp: (WebCore::MockRealtimeAudioSource::MockRealtimeAudioSource): (WebCore::MockRealtimeAudioSource::tick): * platform/mock/MockRealtimeAudioSource.h: Canonical link: https://commits.webkit.org/213468@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@247211 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-07-08 17:46:27 +00:00
return;
Add more MediaStream logging https://bugs.webkit.org/show_bug.cgi?id=223143 <rdar://problem/75380363> Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopTrack): (WebCore::MediaStreamTrack::trackStarted): (WebCore::MediaStreamTrack::trackEnded): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::createAudioSourceProvider): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::end): * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource): (WebCore::AVVideoCaptureSource::startProducingData): (WebCore::AVVideoCaptureSource::stopProducingData): (WebCore::AVVideoCaptureSource::shutdownCaptureSession): (WebCore::AVVideoCaptureSource::orientationChanged): Canonical link: https://commits.webkit.org/235243@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@274376 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-03-13 02:01:11 +00:00
ALWAYS_LOG(LOGIDENTIFIER);
Introduce a RealtimeMediaSource video sample observer https://bugs.webkit.org/show_bug.cgi?id=211718 Reviewed by Eric Carlson. LayoutTests/imported/w3c: * web-platform-tests/mediacapture-streams/MediaStreamTrack-MediaElement-disabled-video-is-black.https-expected.txt: Drive-by fix, since we are now receiving samples but not rendering them when track is not enabled, the loadeddata event is fired appropriately. Update MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode to return PaintItBlack in that case. Source/WebCore: We introduce an observer dedicated to video samples similarly to AudioSampleObserver for audio. This will allow to move video frame processing out of the main thread progressively. For now, we remove video sample observing from the track private and observers should now register directly to the realtime media source. We update the various users, including MediaRecorder and the media player. In both cases, they will only observe the video track to be played/recorded, which is both more efficient and simpler. We introduced RealtimeMediaSource::Observer::hasStartedProducingData callback for MediaStreamTrackPrivate so that the processing to do when the first samples are available can be done on the main thread. MediaStreamTrackPrivate no longer filters out samples if it is not enabled. As such, each consumer is now responsible to observe/unobserve the source when its track gets enabled/disabled similarly as for audio, or do nothing if track is not enabled. Similarly, RealtimeOutgoingVideoSourceCocoa will now only observe video samples when the track is enabled and not muted. Covered by existing tests. * Modules/mediarecorder/MediaRecorder.cpp: (WebCore::MediaRecorder::sampleBufferUpdated): Deleted. * Modules/mediarecorder/MediaRecorder.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample): We can renove the track check since we only observe the active video track. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated): Deleted. * platform/mediarecorder/MediaRecorderPrivate.h: (WebCore::MediaRecorderPrivate::setVideoSource): (WebCore::MediaRecorderPrivate::~MediaRecorderPrivate): * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp: (WebCore::MediaRecorderPrivateAVFImpl::create): (WebCore::MediaRecorderPrivateAVFImpl::~MediaRecorderPrivateAVFImpl): (WebCore::MediaRecorderPrivateAVFImpl::videoSampleAvailable): (WebCore::MediaRecorderPrivateAVFImpl::stopRecording): (WebCore::MediaRecorderPrivateAVFImpl::sampleBufferUpdated): Deleted. * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h: * platform/mediarecorder/MediaRecorderPrivateMock.cpp: (WebCore::MediaRecorderPrivateMock::MediaRecorderPrivateMock): (WebCore::MediaRecorderPrivateMock::~MediaRecorderPrivateMock): (WebCore::MediaRecorderPrivateMock::stopRecording): (WebCore::MediaRecorderPrivateMock::videoSampleAvailable): (WebCore::MediaRecorderPrivateMock::sampleBufferUpdated): Deleted. * platform/mediarecorder/MediaRecorderPrivateMock.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): Deleted. (WebCore::MediaStreamTrackPrivate::hasStartedProducingAudioData): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addVideoSampleObserver): (WebCore::RealtimeMediaSource::removeVideoSampleObserver): (WebCore::RealtimeMediaSource::updateHasStartedProducingData): (WebCore::RealtimeMediaSource::videoSampleAvailable): (WebCore::RealtimeMediaSource::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/RealtimeOutgoingVideoSource.cpp: (WebCore::RealtimeOutgoingVideoSource::unobserveSource): (WebCore::RealtimeOutgoingVideoSource::updateBlackFramesSending): * platform/mediastream/RealtimeOutgoingVideoSource.h: * platform/mediastream/RealtimeVideoSource.cpp: (WebCore::RealtimeVideoSource::~RealtimeVideoSource): (WebCore::RealtimeVideoSource::startProducingData): (WebCore::RealtimeVideoSource::stopProducingData): (WebCore::RealtimeVideoSource::videoSampleAvailable): * platform/mediastream/RealtimeVideoSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection): * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.h: * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm: (WebCore::RealtimeIncomingVideoSourceCocoa::processNewSample): * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp: (WebCore::RealtimeOutgoingVideoSourceCocoa::videoSampleAvailable): (WebCore::RealtimeOutgoingVideoSourceCocoa::sampleBufferUpdated): Deleted. * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.h: * platform/mock/MockRealtimeVideoSource.cpp: * testing/Internals.cpp: (WebCore::Internals::~Internals): (WebCore::Internals::stopObservingRealtimeMediaSource): (WebCore::Internals::observeMediaStreamTrack): * testing/Internals.h: Source/WebKit: * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::SourceProxy::SourceProxy): (WebKit::UserMediaCaptureManagerProxy::SourceProxy::~SourceProxy): * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp: (WebKit::MediaRecorderPrivate::MediaRecorderPrivate): (WebKit::MediaRecorderPrivate::~MediaRecorderPrivate): (WebKit::MediaRecorderPrivate::videoSampleAvailable): (WebKit::MediaRecorderPrivate::stopRecording): (WebKit::MediaRecorderPrivate::sampleBufferUpdated): Deleted. * WebProcess/GPU/webrtc/MediaRecorderPrivate.h: Canonical link: https://commits.webkit.org/224671@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@261553 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-05-12 11:45:25 +00:00
m_hasStartedProducingData = true;
Introduce a RealtimeMediaSource observer dedicated to receiving audio samples https://bugs.webkit.org/show_bug.cgi?id=210180 Reviewed by Eric Carlson. Source/WebCore: RealtimeMediaSource::Observer was called on various threads which was making iterating through them difficult. Observers were copied to a vector for iterating each time and locking was happening for each indivudual observer. Instead of doing that, RealtimeMediaSource::Observer no longer gives access to audio samples, all its methods are called from the main thread. AudioSampleObserver is introduced with a single method to receive audio samples. RealtimeMediaSource keeps a set of AudioSampleObserver separated from its existing Observer hashset. These observers can only be added/removed from the main thread while audio sample delivery usually happens from a background thread. We no longer need to copy the audio sample observers in a vector and lock only once when iterating the audio sample observers. This change requires to update MediaStreamTrackPrivate and RealtimeMediaSource observers. This includes WebAudio, Audio Renderer and Media Recorder. Each corresponding class is now registering itself as a MediaStreamTrackPrivate::Observer and when needed as a RealtimeMediaSource::Observer. This allows removing the additional copy-in-vector/lock that was happening when iterating over MediaStreamTrackPrivate::Observers for audio samples. This change also allows for a consumer to always observe the MediaStreamTrackPrivate but receive audio samples only when needed. We change the AudioTrackPrivateMediaStream implementation so that, if the renderer is muted, not playing, the track is muted or not enabled, it no longer receives audio samples. This is especially useful in the typical case where a video element displays the locally captured stream (including a local audio track) but is muted to prevent feedback loop. For that reason, the player is now setting the muted state of the renderer instead of setting volume to 0. Covered by existing test sets. * Modules/mediarecorder/MediaRecorder.cpp: (WebCore::MediaRecorder::createMediaRecorderPrivate): * Modules/mediarecorder/MediaRecorder.h: * Modules/mediarecorder/MediaRecorderProvider.cpp: (WebCore::MediaRecorderProvider::createMediaRecorderPrivate): * Modules/mediarecorder/MediaRecorderProvider.h: * loader/EmptyClients.cpp: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVolume): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setMuted): * platform/mediarecorder/MediaRecorderPrivate.cpp: (WebCore::MediaRecorderPrivate::selectTracks): * platform/mediarecorder/MediaRecorderPrivate.h: (WebCore::MediaRecorderPrivate::setAudioSource): (WebCore::MediaRecorderPrivate::~MediaRecorderPrivate): * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp: (WebCore::MediaRecorderPrivateAVFImpl::create): (WebCore::MediaRecorderPrivateAVFImpl::~MediaRecorderPrivateAVFImpl): (WebCore::MediaRecorderPrivateAVFImpl::audioSamplesAvailable): (WebCore::MediaRecorderPrivateAVFImpl::stopRecording): (WebCore::MediaRecorderPrivateAVFImpl::fetchData): * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h: * platform/mediarecorder/MediaRecorderPrivateMock.cpp: (WebCore::MediaRecorderPrivateMock::MediaRecorderPrivateMock): (WebCore::MediaRecorderPrivateMock::~MediaRecorderPrivateMock): (WebCore::MediaRecorderPrivateMock::stopRecording): (WebCore::MediaRecorderPrivateMock::sampleBufferUpdated): (WebCore::MediaRecorderPrivateMock::audioSamplesAvailable): (WebCore::MediaRecorderPrivateMock::generateMockCounterString): (WebCore::MediaRecorderPrivateMock::fetchData): * platform/mediarecorder/MediaRecorderPrivateMock.h: * platform/mediastream/AudioTrackPrivateMediaStream.cpp: (WebCore::AudioTrackPrivateMediaStream::AudioTrackPrivateMediaStream): (WebCore::AudioTrackPrivateMediaStream::clear): (WebCore::AudioTrackPrivateMediaStream::play): (WebCore::AudioTrackPrivateMediaStream::pause): (WebCore::AudioTrackPrivateMediaStream::setMuted): (WebCore::AudioTrackPrivateMediaStream::audioSamplesAvailable): (WebCore::AudioTrackPrivateMediaStream::trackMutedChanged): (WebCore::AudioTrackPrivateMediaStream::trackEnabledChanged): (WebCore::AudioTrackPrivateMediaStream::trackEnded): (WebCore::AudioTrackPrivateMediaStream::updateRenderer): (WebCore::AudioTrackPrivateMediaStream::startRenderer): (WebCore::AudioTrackPrivateMediaStream::stopRenderer): * platform/mediastream/AudioTrackPrivateMediaStream.h: * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp: (WebCore::webkitMediaStreamSrcFinalize): (WebCore::webkitMediaStreamSrcChangeState): (WebCore::webkitMediaStreamSrcSetupSrc): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::forEachTrack): * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::forEachObserver const): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::hasStartedProducingAudioData): * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addAudioSampleObserver): (WebCore::RealtimeMediaSource::removeAudioSampleObserver): (WebCore::RealtimeMediaSource::addObserver): (WebCore::RealtimeMediaSource::removeObserver): (WebCore::RealtimeMediaSource::forEachObserver const): (WebCore::RealtimeMediaSource::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/RealtimeOutgoingAudioSource.cpp: (WebCore::RealtimeOutgoingAudioSource::~RealtimeOutgoingAudioSource): (WebCore::RealtimeOutgoingAudioSource::observeSource): (WebCore::RealtimeOutgoingAudioSource::unobserveSource): * platform/mediastream/RealtimeOutgoingAudioSource.h: * platform/mediastream/WebAudioSourceProvider.h: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: (WebCore::WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC): (WebCore::WebAudioSourceProviderAVFObjC::~WebAudioSourceProviderAVFObjC): (WebCore::WebAudioSourceProviderAVFObjC::trackEnabledChanged): (WebCore::WebAudioSourceProviderAVFObjC::audioSamplesAvailable): * testing/Internals.cpp: (WebCore::Internals::~Internals): (WebCore::createRecorderMockSource): (WebCore::Internals::observeMediaStreamTrack): (WebCore::Internals::videoSampleAvailable): * testing/Internals.h: Source/WebKit: Update SourceProxy to be an AudioSampleObserver. Update MediaRecorder to only listen for audio samples if GPU remote writer is successfully created. It also stops listening to audio samples as soon as stopping the recording. * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::SourceProxy::SourceProxy): (WebKit::UserMediaCaptureManagerProxy::SourceProxy::~SourceProxy): * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp: (WebKit::MediaRecorderPrivate::MediaRecorderPrivate): (WebKit::MediaRecorderPrivate::~MediaRecorderPrivate): (WebKit::MediaRecorderPrivate::audioSamplesAvailable): (WebKit::MediaRecorderPrivate::stopRecording): * WebProcess/GPU/webrtc/MediaRecorderPrivate.h: * WebProcess/GPU/webrtc/MediaRecorderProvider.cpp: (WebKit::MediaRecorderProvider::createMediaRecorderPrivate): * WebProcess/GPU/webrtc/MediaRecorderProvider.h: Canonical link: https://commits.webkit.org/223217@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@259861 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-04-10 10:58:42 +00:00
updateReadyState();
Local audio-only stream will not trigger playback to begin https://bugs.webkit.org/show_bug.cgi?id=168412 Reviewed by Youenn Fablet. Source/WebCore: Test: fast/mediastream/local-audio-playing-event.html With video-bearing streams, the first video sample emitted from the stream causes the readyState to move from HAVE_NOTHING to HAVE_ENOUGH_DATA. Wire up this same behavior for audio-bearing streams. Add a MediaStreamTrackPrivate::Observer callback method audioSamplesAvailable(), which gets passed up to MediaPlayerPrivateMediaStreamAVFObjC. Because this callback may be (and probably will be) called on a background thread, run the updateReadyState() task in a scheduledDeferredTask(). * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::audioSamplesAvailable): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::audioSamplesAvailable): LayoutTests: * fast/mediastream/local-audio-playing-event-expected.txt: Added. * fast/mediastream/local-audio-playing-event.html: Added. Canonical link: https://commits.webkit.org/185634@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@212696 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-21 02:35:35 +00:00
}
[MediaStream] Move paintCurrentFrameInContext from RealtimeMediaSources to MediaPlayer https://bugs.webkit.org/show_bug.cgi?id=169474 <rdar://problem/30976747> Reviewed by Youenn Fablet. Source/WebCore: Every video capture source has extremely similar code to render the current frame to a graphics context. Because the media player gets every video sample buffer, have it hang onto the most recent frame so it can implement paintCurrentFrameInContext directly. Fix an existing race condition that occasionally caused the readyState to advance to "have enough data" before a video was ready to paint by defining a MediaStreamTrackPrivate readyState and observing that. No new tests, covered by existing tests. These changes uncovered a bug in fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled.html, which was updated. * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp: (WebCore::CanvasCaptureMediaStreamTrack::Source::captureCanvas): (WebCore::CanvasCaptureMediaStreamTrack::Source::paintCurrentFrameInContext): Deleted. (WebCore::CanvasCaptureMediaStreamTrack::Source::currentFrameImage): Deleted. * Modules/mediastream/CanvasCaptureMediaStreamTrack.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]): Drive-by change - don't pass status to parent callback, it is a property of the layer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable): Drive-by cleanup - we don't use AVSampleBufferRenderSynchronizer so don't fail if it isn't available. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample): Hang onto new frame, invalidate cached image, update readyState. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::layerStatusDidChange): No more "updatePausedImage". (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer): Drive-by cleanup - Add an early return if there is no need for a layer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayer): renderingModeChanged -> updateRenderingMode. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Minor cleanup. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode): Renamed from renderingModeChanged, add a bool return to signal when the mode changes. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): No more m_haveEverPlayed. Update display mode immediately. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): No more paused image. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): Only return HaveNothing, HaveMetadata, or HaveEnoughData. Don't return HaveEnoughData until all enabled tracks are providing data and never drop back to HaveMetadata. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateRenderingMode): Renamed from renderingModeChanged. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged): Update intrinsic size directly. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated): No more m_hasReceivedMedia. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::readyStateChanged): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack): Reset imagePainter when active video track changes. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateCurrentFrameImage): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext): Paint current frame image. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::CurrentFramePainter::reset): New. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::shouldEnqueueVideoSampleBuffer): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updatePausedImage): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateIntrinsicSize): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::renderingModeChanged): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::audioSamplesAvailable): Deleted. * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::paintCurrentFrameInContext): Deleted. (WebCore::MediaStreamPrivate::currentFrameImage): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::endTrack): Update readyState. (WebCore::MediaStreamTrackPrivate::clone): Clone readyState. (WebCore::MediaStreamTrackPrivate::sourceStopped): Update readyState. (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): Ditto. (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): Ditto. (WebCore::MediaStreamTrackPrivate::updateReadyState): New, update readyState and notify observers. (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::currentFrameImage): Deleted. (WebCore::RealtimeMediaSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/AVMediaCaptureSource.mm: (-[WebCoreAVMediaCaptureSourceObserver disconnect]): Drive-by fix - clear m_callback after calling removeNotificationObservers. (-[WebCoreAVMediaCaptureSourceObserver removeNotificationObservers]): Drive-by fix - remove the correct listener. (-[WebCoreAVMediaCaptureSourceObserver endSessionInterrupted:]): * platform/mediastream/mac/AVVideoCaptureSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::currentFrameImage): Deleted. (WebCore::AVVideoCaptureSource::currentFrameCGImage): Deleted. (WebCore::AVVideoCaptureSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp: (WebCore::drawImage): Deleted. (WebCore::RealtimeIncomingVideoSource::currentFrameImage): Deleted. (WebCore::RealtimeIncomingVideoSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/RealtimeIncomingVideoSource.h: * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::paintCurrentFrameInContext): Deleted. (WebCore::MockRealtimeVideoSource::currentFrameImage): Deleted. * platform/mock/MockRealtimeVideoSource.h: LayoutTests: * fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled-expected.txt: * fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled.html: Fix bug uncovered by patch. Canonical link: https://commits.webkit.org/186577@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213880 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-14 00:30:48 +00:00
void MediaStreamTrackPrivate::updateReadyState()
{
ReadyState state = ReadyState::None;
if (m_isEnded)
state = ReadyState::Ended;
Introduce a RealtimeMediaSource video sample observer https://bugs.webkit.org/show_bug.cgi?id=211718 Reviewed by Eric Carlson. LayoutTests/imported/w3c: * web-platform-tests/mediacapture-streams/MediaStreamTrack-MediaElement-disabled-video-is-black.https-expected.txt: Drive-by fix, since we are now receiving samples but not rendering them when track is not enabled, the loadeddata event is fired appropriately. Update MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode to return PaintItBlack in that case. Source/WebCore: We introduce an observer dedicated to video samples similarly to AudioSampleObserver for audio. This will allow to move video frame processing out of the main thread progressively. For now, we remove video sample observing from the track private and observers should now register directly to the realtime media source. We update the various users, including MediaRecorder and the media player. In both cases, they will only observe the video track to be played/recorded, which is both more efficient and simpler. We introduced RealtimeMediaSource::Observer::hasStartedProducingData callback for MediaStreamTrackPrivate so that the processing to do when the first samples are available can be done on the main thread. MediaStreamTrackPrivate no longer filters out samples if it is not enabled. As such, each consumer is now responsible to observe/unobserve the source when its track gets enabled/disabled similarly as for audio, or do nothing if track is not enabled. Similarly, RealtimeOutgoingVideoSourceCocoa will now only observe video samples when the track is enabled and not muted. Covered by existing tests. * Modules/mediarecorder/MediaRecorder.cpp: (WebCore::MediaRecorder::sampleBufferUpdated): Deleted. * Modules/mediarecorder/MediaRecorder.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample): We can renove the track check since we only observe the active video track. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack): (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated): Deleted. * platform/mediarecorder/MediaRecorderPrivate.h: (WebCore::MediaRecorderPrivate::setVideoSource): (WebCore::MediaRecorderPrivate::~MediaRecorderPrivate): * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp: (WebCore::MediaRecorderPrivateAVFImpl::create): (WebCore::MediaRecorderPrivateAVFImpl::~MediaRecorderPrivateAVFImpl): (WebCore::MediaRecorderPrivateAVFImpl::videoSampleAvailable): (WebCore::MediaRecorderPrivateAVFImpl::stopRecording): (WebCore::MediaRecorderPrivateAVFImpl::sampleBufferUpdated): Deleted. * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h: * platform/mediarecorder/MediaRecorderPrivateMock.cpp: (WebCore::MediaRecorderPrivateMock::MediaRecorderPrivateMock): (WebCore::MediaRecorderPrivateMock::~MediaRecorderPrivateMock): (WebCore::MediaRecorderPrivateMock::stopRecording): (WebCore::MediaRecorderPrivateMock::videoSampleAvailable): (WebCore::MediaRecorderPrivateMock::sampleBufferUpdated): Deleted. * platform/mediarecorder/MediaRecorderPrivateMock.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): Deleted. (WebCore::MediaStreamTrackPrivate::hasStartedProducingAudioData): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addVideoSampleObserver): (WebCore::RealtimeMediaSource::removeVideoSampleObserver): (WebCore::RealtimeMediaSource::updateHasStartedProducingData): (WebCore::RealtimeMediaSource::videoSampleAvailable): (WebCore::RealtimeMediaSource::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/RealtimeOutgoingVideoSource.cpp: (WebCore::RealtimeOutgoingVideoSource::unobserveSource): (WebCore::RealtimeOutgoingVideoSource::updateBlackFramesSending): * platform/mediastream/RealtimeOutgoingVideoSource.h: * platform/mediastream/RealtimeVideoSource.cpp: (WebCore::RealtimeVideoSource::~RealtimeVideoSource): (WebCore::RealtimeVideoSource::startProducingData): (WebCore::RealtimeVideoSource::stopProducingData): (WebCore::RealtimeVideoSource::videoSampleAvailable): * platform/mediastream/RealtimeVideoSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection): * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.h: * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm: (WebCore::RealtimeIncomingVideoSourceCocoa::processNewSample): * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp: (WebCore::RealtimeOutgoingVideoSourceCocoa::videoSampleAvailable): (WebCore::RealtimeOutgoingVideoSourceCocoa::sampleBufferUpdated): Deleted. * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.h: * platform/mock/MockRealtimeVideoSource.cpp: * testing/Internals.cpp: (WebCore::Internals::~Internals): (WebCore::Internals::stopObservingRealtimeMediaSource): (WebCore::Internals::observeMediaStreamTrack): * testing/Internals.h: Source/WebKit: * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::SourceProxy::SourceProxy): (WebKit::UserMediaCaptureManagerProxy::SourceProxy::~SourceProxy): * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp: (WebKit::MediaRecorderPrivate::MediaRecorderPrivate): (WebKit::MediaRecorderPrivate::~MediaRecorderPrivate): (WebKit::MediaRecorderPrivate::videoSampleAvailable): (WebKit::MediaRecorderPrivate::stopRecording): (WebKit::MediaRecorderPrivate::sampleBufferUpdated): Deleted. * WebProcess/GPU/webrtc/MediaRecorderPrivate.h: Canonical link: https://commits.webkit.org/224671@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@261553 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-05-12 11:45:25 +00:00
else if (m_hasStartedProducingData)
[MediaStream] Move paintCurrentFrameInContext from RealtimeMediaSources to MediaPlayer https://bugs.webkit.org/show_bug.cgi?id=169474 <rdar://problem/30976747> Reviewed by Youenn Fablet. Source/WebCore: Every video capture source has extremely similar code to render the current frame to a graphics context. Because the media player gets every video sample buffer, have it hang onto the most recent frame so it can implement paintCurrentFrameInContext directly. Fix an existing race condition that occasionally caused the readyState to advance to "have enough data" before a video was ready to paint by defining a MediaStreamTrackPrivate readyState and observing that. No new tests, covered by existing tests. These changes uncovered a bug in fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled.html, which was updated. * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp: (WebCore::CanvasCaptureMediaStreamTrack::Source::captureCanvas): (WebCore::CanvasCaptureMediaStreamTrack::Source::paintCurrentFrameInContext): Deleted. (WebCore::CanvasCaptureMediaStreamTrack::Source::currentFrameImage): Deleted. * Modules/mediastream/CanvasCaptureMediaStreamTrack.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]): Drive-by change - don't pass status to parent callback, it is a property of the layer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable): Drive-by cleanup - we don't use AVSampleBufferRenderSynchronizer so don't fail if it isn't available. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample): Hang onto new frame, invalidate cached image, update readyState. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::layerStatusDidChange): No more "updatePausedImage". (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer): Drive-by cleanup - Add an early return if there is no need for a layer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayer): renderingModeChanged -> updateRenderingMode. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Minor cleanup. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode): Renamed from renderingModeChanged, add a bool return to signal when the mode changes. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): No more m_haveEverPlayed. Update display mode immediately. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): No more paused image. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): Only return HaveNothing, HaveMetadata, or HaveEnoughData. Don't return HaveEnoughData until all enabled tracks are providing data and never drop back to HaveMetadata. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateRenderingMode): Renamed from renderingModeChanged. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged): Update intrinsic size directly. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated): No more m_hasReceivedMedia. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::readyStateChanged): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack): Reset imagePainter when active video track changes. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateCurrentFrameImage): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext): Paint current frame image. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::CurrentFramePainter::reset): New. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::shouldEnqueueVideoSampleBuffer): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updatePausedImage): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateIntrinsicSize): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::renderingModeChanged): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::audioSamplesAvailable): Deleted. * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::paintCurrentFrameInContext): Deleted. (WebCore::MediaStreamPrivate::currentFrameImage): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::endTrack): Update readyState. (WebCore::MediaStreamTrackPrivate::clone): Clone readyState. (WebCore::MediaStreamTrackPrivate::sourceStopped): Update readyState. (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): Ditto. (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): Ditto. (WebCore::MediaStreamTrackPrivate::updateReadyState): New, update readyState and notify observers. (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::currentFrameImage): Deleted. (WebCore::RealtimeMediaSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/AVMediaCaptureSource.mm: (-[WebCoreAVMediaCaptureSourceObserver disconnect]): Drive-by fix - clear m_callback after calling removeNotificationObservers. (-[WebCoreAVMediaCaptureSourceObserver removeNotificationObservers]): Drive-by fix - remove the correct listener. (-[WebCoreAVMediaCaptureSourceObserver endSessionInterrupted:]): * platform/mediastream/mac/AVVideoCaptureSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::currentFrameImage): Deleted. (WebCore::AVVideoCaptureSource::currentFrameCGImage): Deleted. (WebCore::AVVideoCaptureSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp: (WebCore::drawImage): Deleted. (WebCore::RealtimeIncomingVideoSource::currentFrameImage): Deleted. (WebCore::RealtimeIncomingVideoSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/RealtimeIncomingVideoSource.h: * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::paintCurrentFrameInContext): Deleted. (WebCore::MockRealtimeVideoSource::currentFrameImage): Deleted. * platform/mock/MockRealtimeVideoSource.h: LayoutTests: * fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled-expected.txt: * fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled.html: Fix bug uncovered by patch. Canonical link: https://commits.webkit.org/186577@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213880 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-14 00:30:48 +00:00
state = ReadyState::Live;
if (state == m_readyState)
return;
Add more MediaStream logging https://bugs.webkit.org/show_bug.cgi?id=223143 <rdar://problem/75380363> Reviewed by Jer Noble. No new tests, no functional change. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopTrack): (WebCore::MediaStreamTrack::trackStarted): (WebCore::MediaStreamTrack::trackEnded): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::clone): (WebCore::MediaStreamTrackPrivate::createAudioSourceProvider): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): (WebCore::MediaStreamTrackPrivate::hasStartedProducingData): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::requestToEnd): (WebCore::RealtimeMediaSource::end): * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource): (WebCore::AVVideoCaptureSource::startProducingData): (WebCore::AVVideoCaptureSource::stopProducingData): (WebCore::AVVideoCaptureSource::shutdownCaptureSession): (WebCore::AVVideoCaptureSource::orientationChanged): Canonical link: https://commits.webkit.org/235243@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@274376 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-03-13 02:01:11 +00:00
ALWAYS_LOG(LOGIDENTIFIER, state == ReadyState::Ended ? "Ended" : "Live");
Add media stream release logging https://bugs.webkit.org/show_bug.cgi?id=195823 Source/WebCore: <rdar://problem/48939406> Reviewed by Youenn Fablet. No new tests, no behavioral change. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addTrackFromPlatform): (WebCore::MediaStream::setIsActive): (WebCore::MediaStream::mediaCanStart): (WebCore::MediaStream::startProducingData): (WebCore::MediaStream::stopProducingData): (WebCore::MediaStream::endCaptureTracks): (WebCore::MediaStream::stop): (WebCore::MediaStream::logChannel const): * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::logChannel const): * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: (WebCore::LibWebRTCMediaEndpoint::addTrack): (WebCore::LibWebRTCMediaEndpoint::sourceFromNewReceiver): * Modules/webaudio/AudioContext.cpp: (WebCore::AudioContext::AudioContext): (WebCore::nextLogIdentifier): Deleted. * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::nextLogIdentifier): Deleted. * html/HTMLMediaElement.h: * platform/audio/PlatformMediaSession.cpp: (WebCore::PlatformMediaSession::PlatformMediaSession): (WebCore::nextLogIdentifier): Deleted. * platform/audio/PlatformMediaSession.h: * platform/graphics/IntSize.cpp: (WebCore::IntSize::toJSONObject const): (WebCore::IntSize::toJSONString const): * platform/graphics/IntSize.h: (WTF::LogArgument<WebCore::IntSize>::toString): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): (WebCore::MediaStreamPrivate::startProducingData): (WebCore::MediaStreamPrivate::stopProducingData): (WebCore::MediaStreamPrivate::setCaptureTracksMuted): (WebCore::MediaStreamPrivate::trackMutedChanged): (WebCore::MediaStreamPrivate::trackEnabledChanged): (WebCore::MediaStreamPrivate::trackStarted): (WebCore::MediaStreamPrivate::trackEnded): (WebCore::MediaStreamPrivate::setLogger): (WebCore::MediaStreamPrivate::logChannel const): * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::setLogger): (WebCore::MediaStreamTrackPrivate::logChannel const): * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeIncomingAudioSource.cpp: (WebCore::RealtimeIncomingAudioSource::RealtimeIncomingAudioSource): (WebCore::RealtimeIncomingAudioSource::logChannel const): Deleted. (WebCore::RealtimeIncomingAudioSource::logger const): Deleted. * platform/mediastream/RealtimeIncomingAudioSource.h: (WebCore::RealtimeIncomingAudioSource::setLogger): Deleted. * platform/mediastream/RealtimeIncomingVideoSource.cpp: (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource): (WebCore::RealtimeIncomingVideoSource::logChannel const): Deleted. (WebCore::RealtimeIncomingVideoSource::logger const): Deleted. * platform/mediastream/RealtimeIncomingVideoSource.h: (WebCore::RealtimeIncomingVideoSource::setLogger): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::setInterrupted): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::notifyMutedChange): (WebCore::RealtimeMediaSource::notifySettingsDidChangeObservers): (WebCore::RealtimeMediaSource::videoSampleAvailable): (WebCore::RealtimeMediaSource::start): (WebCore::RealtimeMediaSource::stop): (WebCore::RealtimeMediaSource::captureFailed): (WebCore::RealtimeMediaSource::applyConstraint): (WebCore::RealtimeMediaSource::supportsConstraints): (WebCore::RealtimeMediaSource::applyConstraints): (WebCore::RealtimeMediaSource::setSize): (WebCore::RealtimeMediaSource::setIntrinsicSize): (WebCore::RealtimeMediaSource::setFrameRate): (WebCore::RealtimeMediaSource::setAspectRatio): (WebCore::RealtimeMediaSource::setFacingMode): (WebCore::RealtimeMediaSource::setVolume): (WebCore::RealtimeMediaSource::setSampleRate): (WebCore::RealtimeMediaSource::setSampleSize): (WebCore::RealtimeMediaSource::setEchoCancellation): (WebCore::RealtimeMediaSource::setLogger): (WebCore::RealtimeMediaSource::logChannel const): (WebCore::convertEnumerationToString): * platform/mediastream/RealtimeMediaSource.h: (WTF::LogArgument<WebCore::RealtimeMediaSource::Type>::toString): * platform/mediastream/RealtimeMediaSourceSettings.cpp: (WebCore::RealtimeMediaSourceSettings::convertFlagsToString): (WebCore::convertEnumerationToString): * platform/mediastream/RealtimeMediaSourceSettings.h: (WTF::LogArgument<WebCore::RealtimeMediaSourceSettings::VideoFacingMode>::toString): (WTF::LogArgument<OptionSet<WebCore::RealtimeMediaSourceSettings::Flag>>::toString): * platform/mediastream/RealtimeOutgoingAudioSource.cpp: (WebCore::RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource): (WebCore::RealtimeOutgoingAudioSource::logChannel const): (WebCore::RealtimeOutgoingAudioSource::logger const): Deleted. * platform/mediastream/RealtimeOutgoingAudioSource.h: (WebCore::RealtimeOutgoingAudioSource::setLogger): Deleted. * platform/mediastream/RealtimeOutgoingVideoSource.cpp: (WebCore::RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource): (WebCore::RealtimeOutgoingVideoSource::sendOneBlackFrame): (WebCore::RealtimeOutgoingVideoSource::sendFrame): (WebCore::RealtimeOutgoingVideoSource::logChannel const): (WebCore::RealtimeOutgoingVideoSource::logger const): Deleted. * platform/mediastream/RealtimeOutgoingVideoSource.h: (WebCore::RealtimeOutgoingVideoSource::setLogger): Deleted. * platform/mediastream/RealtimeVideoSource.cpp: (WebCore::RealtimeVideoSource::setSizeAndFrameRate): (WebCore::SizeAndFrameRate::toJSONObject const): (WebCore::SizeAndFrameRate::toJSONString const): * platform/mediastream/RealtimeVideoSource.h: (WTF::LogArgument<WebCore::SizeAndFrameRate>::toString): * platform/mediastream/mac/AVVideoCaptureSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::clearSession): (WebCore::AVVideoCaptureSource::startProducingData): (WebCore::AVVideoCaptureSource::stopProducingData): (WebCore::AVVideoCaptureSource::setSizeAndFrameRateWithPreset): (WebCore::AVVideoCaptureSource::setupSession): (WebCore::AVVideoCaptureSource::frameDurationForFrameRate): (WebCore::AVVideoCaptureSource::setupCaptureSession): (WebCore::AVVideoCaptureSource::captureSessionIsRunningDidChange): (WebCore::AVVideoCaptureSource::captureDeviceSuspendedDidChange): (WebCore::AVVideoCaptureSource::captureSessionRuntimeError): (WebCore::AVVideoCaptureSource::captureSessionBeginInterruption): (WebCore::AVVideoCaptureSource::captureSessionEndInterruption): (WebCore::AVVideoCaptureSource::deviceDisconnected): (-[WebCoreAVVideoCaptureSourceObserver observeValueForKeyPath:ofObject:change:context:]): (-[WebCoreAVVideoCaptureSourceObserver deviceConnectedDidChange:]): (-[WebCoreAVVideoCaptureSourceObserver sessionRuntimeError:]): (-[WebCoreAVVideoCaptureSourceObserver beginSessionInterrupted:]): (-[WebCoreAVVideoCaptureSourceObserver endSessionInterrupted:]): (WebCore::AVVideoCaptureSource::initializeSession): Deleted. * platform/mediastream/mac/CoreAudioCaptureSource.cpp: (WebCore::CoreAudioSharedUnit::setupAudioUnit): (WebCore::CoreAudioSharedUnit::verifyIsCapturing): (WebCore::CoreAudioSharedUnit::captureFailed): (WebCore::CoreAudioCaptureSource::initializeToStartProducingData): (WebCore::CoreAudioCaptureSource::addEchoCancellationSource): (WebCore::CoreAudioCaptureSource::removeEchoCancellationSource): (WebCore::CoreAudioCaptureSource::startProducingData): (WebCore::CoreAudioCaptureSource::stopProducingData): (WebCore::CoreAudioCaptureSource::scheduleReconfiguration): (WebCore::CoreAudioCaptureSource::beginInterruption): (WebCore::CoreAudioCaptureSource::endInterruption): * platform/mediastream/mac/CoreAudioCaptureSource.h: * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h: * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm: (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream): (WebCore::ScreenDisplayCaptureSourceMac::startProducingData): (WebCore::ScreenDisplayCaptureSourceMac::stopProducingData): (WebCore::ScreenDisplayCaptureSourceMac::startDisplayStream): Source/WTF: Reviewed by Youenn Fablet. * wtf/LoggerHelper.h: Add LOG_IF variants that check a condition before logging. Canonical link: https://commits.webkit.org/210116@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243033 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-03-16 05:21:43 +00:00
[MediaStream] Move paintCurrentFrameInContext from RealtimeMediaSources to MediaPlayer https://bugs.webkit.org/show_bug.cgi?id=169474 <rdar://problem/30976747> Reviewed by Youenn Fablet. Source/WebCore: Every video capture source has extremely similar code to render the current frame to a graphics context. Because the media player gets every video sample buffer, have it hang onto the most recent frame so it can implement paintCurrentFrameInContext directly. Fix an existing race condition that occasionally caused the readyState to advance to "have enough data" before a video was ready to paint by defining a MediaStreamTrackPrivate readyState and observing that. No new tests, covered by existing tests. These changes uncovered a bug in fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled.html, which was updated. * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp: (WebCore::CanvasCaptureMediaStreamTrack::Source::captureCanvas): (WebCore::CanvasCaptureMediaStreamTrack::Source::paintCurrentFrameInContext): Deleted. (WebCore::CanvasCaptureMediaStreamTrack::Source::currentFrameImage): Deleted. * Modules/mediastream/CanvasCaptureMediaStreamTrack.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]): Drive-by change - don't pass status to parent callback, it is a property of the layer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable): Drive-by cleanup - we don't use AVSampleBufferRenderSynchronizer so don't fail if it isn't available. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample): Hang onto new frame, invalidate cached image, update readyState. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::layerStatusDidChange): No more "updatePausedImage". (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer): Drive-by cleanup - Add an early return if there is no need for a layer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayer): renderingModeChanged -> updateRenderingMode. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Minor cleanup. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode): Renamed from renderingModeChanged, add a bool return to signal when the mode changes. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): No more m_haveEverPlayed. Update display mode immediately. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): No more paused image. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): Only return HaveNothing, HaveMetadata, or HaveEnoughData. Don't return HaveEnoughData until all enabled tracks are providing data and never drop back to HaveMetadata. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateRenderingMode): Renamed from renderingModeChanged. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged): Update intrinsic size directly. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated): No more m_hasReceivedMedia. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::readyStateChanged): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack): Reset imagePainter when active video track changes. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateCurrentFrameImage): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext): Paint current frame image. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::CurrentFramePainter::reset): New. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::shouldEnqueueVideoSampleBuffer): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updatePausedImage): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateIntrinsicSize): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::renderingModeChanged): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::audioSamplesAvailable): Deleted. * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::paintCurrentFrameInContext): Deleted. (WebCore::MediaStreamPrivate::currentFrameImage): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::endTrack): Update readyState. (WebCore::MediaStreamTrackPrivate::clone): Clone readyState. (WebCore::MediaStreamTrackPrivate::sourceStopped): Update readyState. (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): Ditto. (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): Ditto. (WebCore::MediaStreamTrackPrivate::updateReadyState): New, update readyState and notify observers. (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::currentFrameImage): Deleted. (WebCore::RealtimeMediaSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/AVMediaCaptureSource.mm: (-[WebCoreAVMediaCaptureSourceObserver disconnect]): Drive-by fix - clear m_callback after calling removeNotificationObservers. (-[WebCoreAVMediaCaptureSourceObserver removeNotificationObservers]): Drive-by fix - remove the correct listener. (-[WebCoreAVMediaCaptureSourceObserver endSessionInterrupted:]): * platform/mediastream/mac/AVVideoCaptureSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::currentFrameImage): Deleted. (WebCore::AVVideoCaptureSource::currentFrameCGImage): Deleted. (WebCore::AVVideoCaptureSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp: (WebCore::drawImage): Deleted. (WebCore::RealtimeIncomingVideoSource::currentFrameImage): Deleted. (WebCore::RealtimeIncomingVideoSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/RealtimeIncomingVideoSource.h: * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::paintCurrentFrameInContext): Deleted. (WebCore::MockRealtimeVideoSource::currentFrameImage): Deleted. * platform/mock/MockRealtimeVideoSource.h: LayoutTests: * fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled-expected.txt: * fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled.html: Fix bug uncovered by patch. Canonical link: https://commits.webkit.org/186577@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213880 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-14 00:30:48 +00:00
m_readyState = state;
Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable() https://bugs.webkit.org/show_bug.cgi?id=188097 <rdar://problem/42558823> Reviewed by Eric Carlson. Source/WebCore: Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable(). RealtimeMediaSource::audioSamplesAvailable() is called on a background thread but iterates over observers that may get destroyed concurrently on the main thread. To address the issue: - Introduce a Lock to protect m_observer accesses - Copy observers to a Vector before iterating over them * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::forEachObserver const): (WebCore::MediaStreamTrackPrivate::addObserver): (WebCore::MediaStreamTrackPrivate::removeObserver): (WebCore::MediaStreamTrackPrivate::setEnabled): (WebCore::MediaStreamTrackPrivate::endTrack): (WebCore::MediaStreamTrackPrivate::sourceStarted): (WebCore::MediaStreamTrackPrivate::sourceStopped): (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged): (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): (WebCore::MediaStreamTrackPrivate::updateReadyState): * platform/mediastream/MediaStreamTrackPrivate.h: (WebCore::MediaStreamTrackPrivate::Observer::sampleBufferUpdated): (WebCore::MediaStreamTrackPrivate::Observer::audioSamplesAvailable): * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::addObserver): (WebCore::RealtimeMediaSource::removeObserver): (WebCore::RealtimeMediaSource::forEachObserver const): (WebCore::RealtimeMediaSource::notifyMutedObservers const): (WebCore::RealtimeMediaSource::settingsDidChange): (WebCore::RealtimeMediaSource::videoSampleAvailable): (WebCore::RealtimeMediaSource::audioSamplesAvailable): (WebCore::RealtimeMediaSource::start): (WebCore::RealtimeMediaSource::requestStop): (WebCore::RealtimeMediaSource::captureFailed): * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp: (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable): * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp: * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: Source/WebKit: * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: Canonical link: https://commits.webkit.org/203253@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234334 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-07-27 22:33:52 +00:00
forEachObserver([this](auto& observer) {
observer.readyStateChanged(*this);
});
[MediaStream] Move paintCurrentFrameInContext from RealtimeMediaSources to MediaPlayer https://bugs.webkit.org/show_bug.cgi?id=169474 <rdar://problem/30976747> Reviewed by Youenn Fablet. Source/WebCore: Every video capture source has extremely similar code to render the current frame to a graphics context. Because the media player gets every video sample buffer, have it hang onto the most recent frame so it can implement paintCurrentFrameInContext directly. Fix an existing race condition that occasionally caused the readyState to advance to "have enough data" before a video was ready to paint by defining a MediaStreamTrackPrivate readyState and observing that. No new tests, covered by existing tests. These changes uncovered a bug in fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled.html, which was updated. * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp: (WebCore::CanvasCaptureMediaStreamTrack::Source::captureCanvas): (WebCore::CanvasCaptureMediaStreamTrack::Source::paintCurrentFrameInContext): Deleted. (WebCore::CanvasCaptureMediaStreamTrack::Source::currentFrameImage): Deleted. * Modules/mediastream/CanvasCaptureMediaStreamTrack.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]): Drive-by change - don't pass status to parent callback, it is a property of the layer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable): Drive-by cleanup - we don't use AVSampleBufferRenderSynchronizer so don't fail if it isn't available. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample): Hang onto new frame, invalidate cached image, update readyState. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::layerStatusDidChange): No more "updatePausedImage". (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayer): Drive-by cleanup - Add an early return if there is no need for a layer. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayer): renderingModeChanged -> updateRenderingMode. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Minor cleanup. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode): Renamed from renderingModeChanged, add a bool return to signal when the mode changes. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): No more m_haveEverPlayed. Update display mode immediately. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): No more paused image. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): Only return HaveNothing, HaveMetadata, or HaveEnoughData. Don't return HaveEnoughData until all enabled tracks are providing data and never drop back to HaveMetadata. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateRenderingMode): Renamed from renderingModeChanged. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged): Update intrinsic size directly. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated): No more m_hasReceivedMedia. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::readyStateChanged): Ditto. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack): Reset imagePainter when active video track changes. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateCurrentFrameImage): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext): Paint current frame image. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::CurrentFramePainter::reset): New. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::shouldEnqueueVideoSampleBuffer): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updatePausedImage): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateIntrinsicSize): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::renderingModeChanged): Deleted. (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::audioSamplesAvailable): Deleted. * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::paintCurrentFrameInContext): Deleted. (WebCore::MediaStreamPrivate::currentFrameImage): Deleted. * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): (WebCore::MediaStreamTrackPrivate::endTrack): Update readyState. (WebCore::MediaStreamTrackPrivate::clone): Clone readyState. (WebCore::MediaStreamTrackPrivate::sourceStopped): Update readyState. (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): Ditto. (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable): Ditto. (WebCore::MediaStreamTrackPrivate::updateReadyState): New, update readyState and notify observers. (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): Deleted. * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): Deleted. * platform/mediastream/RealtimeMediaSource.h: (WebCore::RealtimeMediaSource::currentFrameImage): Deleted. (WebCore::RealtimeMediaSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/AVMediaCaptureSource.mm: (-[WebCoreAVMediaCaptureSourceObserver disconnect]): Drive-by fix - clear m_callback after calling removeNotificationObservers. (-[WebCoreAVMediaCaptureSourceObserver removeNotificationObservers]): Drive-by fix - remove the correct listener. (-[WebCoreAVMediaCaptureSourceObserver endSessionInterrupted:]): * platform/mediastream/mac/AVVideoCaptureSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::currentFrameImage): Deleted. (WebCore::AVVideoCaptureSource::currentFrameCGImage): Deleted. (WebCore::AVVideoCaptureSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp: (WebCore::drawImage): Deleted. (WebCore::RealtimeIncomingVideoSource::currentFrameImage): Deleted. (WebCore::RealtimeIncomingVideoSource::paintCurrentFrameInContext): Deleted. * platform/mediastream/mac/RealtimeIncomingVideoSource.h: * platform/mock/MockRealtimeVideoSource.cpp: (WebCore::MockRealtimeVideoSource::paintCurrentFrameInContext): Deleted. (WebCore::MockRealtimeVideoSource::currentFrameImage): Deleted. * platform/mock/MockRealtimeVideoSource.h: LayoutTests: * fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled-expected.txt: * fast/mediastream/MediaStream-video-element-video-tracks-disabled-then-enabled.html: Fix bug uncovered by patch. Canonical link: https://commits.webkit.org/186577@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213880 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-14 00:30:48 +00:00
}
Add support for AudioSession handling in GPUProcess for capture https://bugs.webkit.org/show_bug.cgi?id=207950 Reviewed by Eric Carlson. Source/WebCore: Add a dedicated interface for handling audio capture in session manager. This was previoulsy PlatformMediaSessionClient, but this one is more related to audio/video rendering. Use this new interface for MediaStreamTrack capture sources. The session manager now owns a WeakHashSet of capture sources to compute the correct AudioSession category. Modernize the code, for instance use an enum class for MediaType to remove some debug asserts. Add a new PlatformMediaSessionManager::create that is used for sharedManager. Remove the direct use of PlatformMediaSessionManager::sharedManager from classes that can be used outside of WebProcess. This includes BaseAudioSharedUnit, for which we add a audioUnitWillStart callback so that we compute the right AudioSession category before starting the capture. Covered by existing tests and debug assertions to check for AudioSession category computation. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::isCapturingAudio const): * Modules/mediastream/MediaStreamTrack.h: * Modules/webaudio/AudioContext.h: * html/HTMLAudioElement.h: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::shouldDisableSleep const): (WebCore::HTMLMediaElement::mediaType const): (WebCore::HTMLMediaElement::presentationType const): * html/HTMLVideoElement.h: * html/MediaElementSession.cpp: (WebCore::MediaElementSession::canShowControlsManager const): * html/MediaElementSession.h: * platform/audio/PlatformMediaSession.cpp: (WebCore::PlatformMediaSession::PlatformMediaSession): (WebCore::PlatformMediaSession::activeAudioSessionRequired const): * platform/audio/PlatformMediaSession.h: * platform/audio/PlatformMediaSessionManager.cpp: (WebCore::sharedPlatformMediaSessionManager): (WebCore::PlatformMediaSessionManager::sharedManager): (WebCore::PlatformMediaSessionManager::sharedManagerIfExists): (WebCore::PlatformMediaSessionManager::create): (WebCore::indexFromMediaType): (WebCore::PlatformMediaSessionManager::resetRestrictions): (WebCore::PlatformMediaSessionManager::has const): (WebCore::PlatformMediaSessionManager::count const): (WebCore::PlatformMediaSessionManager::countActiveAudioCaptureSources): (WebCore::PlatformMediaSessionManager::addRestriction): (WebCore::PlatformMediaSessionManager::removeRestriction): (WebCore::PlatformMediaSessionManager::restrictions): (WebCore::PlatformMediaSessionManager::sessionWillBeginPlayback): (WebCore::PlatformMediaSessionManager::applicationWillBecomeInactive): (WebCore::PlatformMediaSessionManager::applicationDidBecomeActive): (WebCore::PlatformMediaSessionManager::applicationDidEnterBackground): (WebCore::PlatformMediaSessionManager::applicationWillEnterForeground): (WebCore::PlatformMediaSessionManager::sessionIsPlayingToWirelessPlaybackTargetChanged): (WebCore::PlatformMediaSessionManager::addAudioCaptureSource): (WebCore::PlatformMediaSessionManager::removeAudioCaptureSource): * platform/audio/PlatformMediaSessionManager.h: * platform/audio/cocoa/MediaSessionManagerCocoa.mm: (PlatformMediaSessionManager::create): (MediaSessionManagerCocoa::updateSessionState): * platform/audio/ios/MediaSessionManagerIOS.mm: (WebCore::PlatformMediaSessionManager::create): (WebCore::MediaSessionManageriOS::resetRestrictions): * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::audioUnitWillStart): * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeMediaSource.h: * platform/mediastream/mac/BaseAudioSharedUnit.cpp: (WebCore::BaseAudioSharedUnit::startUnit): * platform/mediastream/mac/BaseAudioSharedUnit.h: * platform/mediastream/mac/CoreAudioCaptureSource.cpp: (WebCore::CoreAudioCaptureSource::audioUnitWillStart): * platform/mediastream/mac/CoreAudioCaptureSource.h: * testing/Internals.cpp: (WebCore::mediaTypeFromString): (WebCore::Internals::setMediaSessionRestrictions): (WebCore::Internals::mediaSessionRestrictions const): Source/WebKit: Create a session manager for the GPUConnectionToWebProcess. Pass it to any audio capture source proxy. For UIProcesss audio capture, we still use the shared manager. * GPUProcess/GPUConnectionToWebProcess.cpp: (WebKit::GPUConnectionToWebProcess::sessionManager): * GPUProcess/GPUConnectionToWebProcess.h: * GPUProcess/GPUProcess.cpp: (WebKit::GPUProcess::setMockCaptureDevicesEnabled): * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::SourceProxy::SourceProxy): (WebKit::UserMediaCaptureManagerProxy::SourceProxy::~SourceProxy): (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints): (WebKit::UserMediaCaptureManagerProxy::clone): * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h: * UIProcess/WebProcessProxy.cpp: LayoutTests: * platform/ios/TestExpectations: Canonical link: https://commits.webkit.org/220952@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@257039 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-02-20 03:51:21 +00:00
void MediaStreamTrackPrivate::audioUnitWillStart()
{
if (!m_isEnded)
PlatformMediaSessionManager::sharedManager().sessionCanProduceAudioChanged();
}
Add media stream release logging https://bugs.webkit.org/show_bug.cgi?id=195823 Source/WebCore: <rdar://problem/48939406> Reviewed by Youenn Fablet. No new tests, no behavioral change. * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): (WebCore::MediaStream::clone): (WebCore::MediaStream::addTrack): (WebCore::MediaStream::removeTrack): (WebCore::MediaStream::addTrackFromPlatform): (WebCore::MediaStream::setIsActive): (WebCore::MediaStream::mediaCanStart): (WebCore::MediaStream::startProducingData): (WebCore::MediaStream::stopProducingData): (WebCore::MediaStream::endCaptureTracks): (WebCore::MediaStream::stop): (WebCore::MediaStream::logChannel const): * Modules/mediastream/MediaStream.h: * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): (WebCore::MediaStreamTrack::logChannel const): * Modules/mediastream/MediaStreamTrack.h: * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: (WebCore::LibWebRTCMediaEndpoint::addTrack): (WebCore::LibWebRTCMediaEndpoint::sourceFromNewReceiver): * Modules/webaudio/AudioContext.cpp: (WebCore::AudioContext::AudioContext): (WebCore::nextLogIdentifier): Deleted. * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::nextLogIdentifier): Deleted. * html/HTMLMediaElement.h: * platform/audio/PlatformMediaSession.cpp: (WebCore::PlatformMediaSession::PlatformMediaSession): (WebCore::nextLogIdentifier): Deleted. * platform/audio/PlatformMediaSession.h: * platform/graphics/IntSize.cpp: (WebCore::IntSize::toJSONObject const): (WebCore::IntSize::toJSONString const): * platform/graphics/IntSize.h: (WTF::LogArgument<WebCore::IntSize>::toString): * platform/mediastream/MediaStreamPrivate.cpp: (WebCore::MediaStreamPrivate::addTrack): (WebCore::MediaStreamPrivate::removeTrack): (WebCore::MediaStreamPrivate::startProducingData): (WebCore::MediaStreamPrivate::stopProducingData): (WebCore::MediaStreamPrivate::setCaptureTracksMuted): (WebCore::MediaStreamPrivate::trackMutedChanged): (WebCore::MediaStreamPrivate::trackEnabledChanged): (WebCore::MediaStreamPrivate::trackStarted): (WebCore::MediaStreamPrivate::trackEnded): (WebCore::MediaStreamPrivate::setLogger): (WebCore::MediaStreamPrivate::logChannel const): * platform/mediastream/MediaStreamPrivate.h: * platform/mediastream/MediaStreamTrackPrivate.cpp: (WebCore::MediaStreamTrackPrivate::setLogger): (WebCore::MediaStreamTrackPrivate::logChannel const): * platform/mediastream/MediaStreamTrackPrivate.h: * platform/mediastream/RealtimeIncomingAudioSource.cpp: (WebCore::RealtimeIncomingAudioSource::RealtimeIncomingAudioSource): (WebCore::RealtimeIncomingAudioSource::logChannel const): Deleted. (WebCore::RealtimeIncomingAudioSource::logger const): Deleted. * platform/mediastream/RealtimeIncomingAudioSource.h: (WebCore::RealtimeIncomingAudioSource::setLogger): Deleted. * platform/mediastream/RealtimeIncomingVideoSource.cpp: (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource): (WebCore::RealtimeIncomingVideoSource::logChannel const): Deleted. (WebCore::RealtimeIncomingVideoSource::logger const): Deleted. * platform/mediastream/RealtimeIncomingVideoSource.h: (WebCore::RealtimeIncomingVideoSource::setLogger): Deleted. * platform/mediastream/RealtimeMediaSource.cpp: (WebCore::RealtimeMediaSource::RealtimeMediaSource): (WebCore::RealtimeMediaSource::setInterrupted): (WebCore::RealtimeMediaSource::setMuted): (WebCore::RealtimeMediaSource::notifyMutedChange): (WebCore::RealtimeMediaSource::notifySettingsDidChangeObservers): (WebCore::RealtimeMediaSource::videoSampleAvailable): (WebCore::RealtimeMediaSource::start): (WebCore::RealtimeMediaSource::stop): (WebCore::RealtimeMediaSource::captureFailed): (WebCore::RealtimeMediaSource::applyConstraint): (WebCore::RealtimeMediaSource::supportsConstraints): (WebCore::RealtimeMediaSource::applyConstraints): (WebCore::RealtimeMediaSource::setSize): (WebCore::RealtimeMediaSource::setIntrinsicSize): (WebCore::RealtimeMediaSource::setFrameRate): (WebCore::RealtimeMediaSource::setAspectRatio): (WebCore::RealtimeMediaSource::setFacingMode): (WebCore::RealtimeMediaSource::setVolume): (WebCore::RealtimeMediaSource::setSampleRate): (WebCore::RealtimeMediaSource::setSampleSize): (WebCore::RealtimeMediaSource::setEchoCancellation): (WebCore::RealtimeMediaSource::setLogger): (WebCore::RealtimeMediaSource::logChannel const): (WebCore::convertEnumerationToString): * platform/mediastream/RealtimeMediaSource.h: (WTF::LogArgument<WebCore::RealtimeMediaSource::Type>::toString): * platform/mediastream/RealtimeMediaSourceSettings.cpp: (WebCore::RealtimeMediaSourceSettings::convertFlagsToString): (WebCore::convertEnumerationToString): * platform/mediastream/RealtimeMediaSourceSettings.h: (WTF::LogArgument<WebCore::RealtimeMediaSourceSettings::VideoFacingMode>::toString): (WTF::LogArgument<OptionSet<WebCore::RealtimeMediaSourceSettings::Flag>>::toString): * platform/mediastream/RealtimeOutgoingAudioSource.cpp: (WebCore::RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource): (WebCore::RealtimeOutgoingAudioSource::logChannel const): (WebCore::RealtimeOutgoingAudioSource::logger const): Deleted. * platform/mediastream/RealtimeOutgoingAudioSource.h: (WebCore::RealtimeOutgoingAudioSource::setLogger): Deleted. * platform/mediastream/RealtimeOutgoingVideoSource.cpp: (WebCore::RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource): (WebCore::RealtimeOutgoingVideoSource::sendOneBlackFrame): (WebCore::RealtimeOutgoingVideoSource::sendFrame): (WebCore::RealtimeOutgoingVideoSource::logChannel const): (WebCore::RealtimeOutgoingVideoSource::logger const): Deleted. * platform/mediastream/RealtimeOutgoingVideoSource.h: (WebCore::RealtimeOutgoingVideoSource::setLogger): Deleted. * platform/mediastream/RealtimeVideoSource.cpp: (WebCore::RealtimeVideoSource::setSizeAndFrameRate): (WebCore::SizeAndFrameRate::toJSONObject const): (WebCore::SizeAndFrameRate::toJSONString const): * platform/mediastream/RealtimeVideoSource.h: (WTF::LogArgument<WebCore::SizeAndFrameRate>::toString): * platform/mediastream/mac/AVVideoCaptureSource.h: * platform/mediastream/mac/AVVideoCaptureSource.mm: (WebCore::AVVideoCaptureSource::clearSession): (WebCore::AVVideoCaptureSource::startProducingData): (WebCore::AVVideoCaptureSource::stopProducingData): (WebCore::AVVideoCaptureSource::setSizeAndFrameRateWithPreset): (WebCore::AVVideoCaptureSource::setupSession): (WebCore::AVVideoCaptureSource::frameDurationForFrameRate): (WebCore::AVVideoCaptureSource::setupCaptureSession): (WebCore::AVVideoCaptureSource::captureSessionIsRunningDidChange): (WebCore::AVVideoCaptureSource::captureDeviceSuspendedDidChange): (WebCore::AVVideoCaptureSource::captureSessionRuntimeError): (WebCore::AVVideoCaptureSource::captureSessionBeginInterruption): (WebCore::AVVideoCaptureSource::captureSessionEndInterruption): (WebCore::AVVideoCaptureSource::deviceDisconnected): (-[WebCoreAVVideoCaptureSourceObserver observeValueForKeyPath:ofObject:change:context:]): (-[WebCoreAVVideoCaptureSourceObserver deviceConnectedDidChange:]): (-[WebCoreAVVideoCaptureSourceObserver sessionRuntimeError:]): (-[WebCoreAVVideoCaptureSourceObserver beginSessionInterrupted:]): (-[WebCoreAVVideoCaptureSourceObserver endSessionInterrupted:]): (WebCore::AVVideoCaptureSource::initializeSession): Deleted. * platform/mediastream/mac/CoreAudioCaptureSource.cpp: (WebCore::CoreAudioSharedUnit::setupAudioUnit): (WebCore::CoreAudioSharedUnit::verifyIsCapturing): (WebCore::CoreAudioSharedUnit::captureFailed): (WebCore::CoreAudioCaptureSource::initializeToStartProducingData): (WebCore::CoreAudioCaptureSource::addEchoCancellationSource): (WebCore::CoreAudioCaptureSource::removeEchoCancellationSource): (WebCore::CoreAudioCaptureSource::startProducingData): (WebCore::CoreAudioCaptureSource::stopProducingData): (WebCore::CoreAudioCaptureSource::scheduleReconfiguration): (WebCore::CoreAudioCaptureSource::beginInterruption): (WebCore::CoreAudioCaptureSource::endInterruption): * platform/mediastream/mac/CoreAudioCaptureSource.h: * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h: * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm: (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream): (WebCore::ScreenDisplayCaptureSourceMac::startProducingData): (WebCore::ScreenDisplayCaptureSourceMac::stopProducingData): (WebCore::ScreenDisplayCaptureSourceMac::startDisplayStream): Source/WTF: Reviewed by Youenn Fablet. * wtf/LoggerHelper.h: Add LOG_IF variants that check a condition before logging. Canonical link: https://commits.webkit.org/210116@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243033 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-03-16 05:21:43 +00:00
#if !RELEASE_LOG_DISABLED
WTFLogChannel& MediaStreamTrackPrivate::logChannel() const
{
return LogWebRTC;
}
#endif
Adding platform implementation of MediaStreamTrack https://bugs.webkit.org/show_bug.cgi?id=123301 Patch by Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> on 2013-10-25 Reviewed by Eric Carlson. No new tests needed. * CMakeLists.txt: * Modules/mediastream/AudioStreamTrack.cpp: (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. (WebCore::AudioStreamTrack::AudioStreamTrack): * Modules/mediastream/AudioStreamTrack.h: * Modules/mediastream/MediaStream.cpp: (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate instances to create each MediaStreamTrack of MediaStream. (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with MediaStreamTrackPrivate as parameter. * Modules/mediastream/MediaStreamTrack.cpp: (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a MediaStreamSource. (WebCore::MediaStreamTrack::~MediaStreamTrack): (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::setSource): Ditto. (WebCore::MediaStreamTrack::id): Ditto. (WebCore::MediaStreamTrack::label): Ditto. (WebCore::MediaStreamTrack::enabled): Ditto. (WebCore::MediaStreamTrack::setEnabled): Ditto. (WebCore::MediaStreamTrack::muted): Ditto. (WebCore::MediaStreamTrack::readonly): Ditto. (WebCore::MediaStreamTrack::remote): Ditto. (WebCore::MediaStreamTrack::readyState): Ditto. (WebCore::MediaStreamTrack::states): (WebCore::MediaStreamTrack::capabilities): (WebCore::MediaStreamTrack::clone): (WebCore::MediaStreamTrack::stopProducingData): (WebCore::MediaStreamTrack::ended): Ditto. (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. (WebCore::MediaStreamTrack::configureTrackRendering): (WebCore::MediaStreamTrack::stopped): Ditto. (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. (WebCore::MediaStreamTrack::privateTrack): * Modules/mediastream/VideoStreamTrack.cpp: (WebCore::VideoStreamTrack::create): (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. * Modules/mediastream/VideoStreamTrack.h: * platform/mediastream/MediaStreamDescriptor.cpp: (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of MediaStreamDescriptor class). (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector * platform/mediastream/MediaStreamDescriptor.h: (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor has. (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. * platform/mediastream/MediaStreamTrackPrivate.h: Added. Canonical link: https://commits.webkit.org/141444@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158018 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-25 17:35:20 +00:00
} // namespace WebCore
#endif // ENABLE(MEDIA_STREAM)