Skip to content
  • eric.carlson@apple.com's avatar
    [Mac MediaStream] implement AVFoundation backed MediaStreamSource · 439f74ad
    eric.carlson@apple.com authored
    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.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158220 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    439f74ad