Skip to content
  • jer.noble@apple.com's avatar
    [MSE][Mac] Add a new MSE-compatible MediaPlayerPrivate implementation,... · 1dfc3a43
    jer.noble@apple.com authored
    [MSE][Mac] Add a new MSE-compatible MediaPlayerPrivate implementation, MediaPlayerPrivateMediaSourceAVFObjC
    https://bugs.webkit.org/show_bug.cgi?id=123378
    
    Reviewed by Eric Carlson.
    
    Add an AVFoundation implementation of MediaPlayerPrivate which creates and uses
    MediaSourcePrivate and SourceBufferPrivate subclasses.
    
    Add the new media engine to the list of installed engines:
    * platform/MediaSample.h:
    * platform/graphics/MediaPlayer.cpp:
    (WebCore::installedMediaEngines):
    * platform/graphics/MediaPlayer.h:
    
    Add the new files to the project:
    * WebCore.xcodeproj/project.pbxproj:
    
    Drive by fix for ports who implement seekDouble():
    * platform/graphics/MediaPlayerPrivate.h:
    (WebCore::MediaPlayerPrivateInterface::seekWithTolerance):
    
    Add new Video and AudioTrackPrivate types which handle their own enable state:
    * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.cpp: Added
    (WebCore::AudioTrackPrivateMediaSourceAVFObjC::AudioTrackPrivateMediaSourceAVFObjC):
    (WebCore::AudioTrackPrivateMediaSourceAVFObjC::resetPropertiesFromTrack):
    (WebCore::AudioTrackPrivateMediaSourceAVFObjC::setAssetTrack):
    (WebCore::AudioTrackPrivateMediaSourceAVFObjC::assetTrack):
    (WebCore::AudioTrackPrivateMediaSourceAVFObjC::setEnabled):
    * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.h: Added
    * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.cpp: Added.
    (WebCore::VideoTrackPrivateMediaSourceAVFObjC::VideoTrackPrivateMediaSourceAVFObjC):
    (WebCore::VideoTrackPrivateMediaSourceAVFObjC::resetPropertiesFromTrack):
    (WebCore::VideoTrackPrivateMediaSourceAVFObjC::setAssetTrack):
    (WebCore::VideoTrackPrivateMediaSourceAVFObjC::assetTrack):
    (WebCore::VideoTrackPrivateMediaSourceAVFObjC::setSelected):
    * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h: Added.
    
    Add a new MediaPlayerPrivate which can handle MediaSource objects:
    * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h: Added.
    * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm: Added.
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::~MediaPlayerPrivateMediaSourceAVFObjC):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::registerMediaEngine):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::create):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isAvailable):
    (WebCore::mimeTypeCache):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::getSupportedTypes):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsType):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::load):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::cancelLoad):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::prepareToPlay):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::platformMedia):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::platformLayer):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::play):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::playInternal):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pause):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pauseInternal):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paused):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsScanning):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::naturalSize):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasVideo):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasAudio):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVisible):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::durationDouble):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::currentTimeDouble):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::startTimeDouble):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::initialTime):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekWithTolerance):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seeking):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setRateDouble):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::networkState):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::readyState):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekable):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::maxTimeSeekableDouble):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::minTimeSeekable):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::buffered):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::didLoadingProgress):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setSize):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paint):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paintCurrentFrameInContext):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasAvailableVideoFrame):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsAcceleratedRendering):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::acceleratedRenderingStateChanged):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::movieLoadType):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::prepareForRendering):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::engineDescription):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::languageOfPrimaryAudioTrack):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::extraMemoryCost):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureLayer):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::destroyLayer):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::updateDuration):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::updateStates):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setReadyState):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setNetworkState):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addDisplayLayer):
    (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeDisplayLayer):
    
    Add a new MediaSourcePrivate implementation:
    * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h: Added.
    (WebCore::MediaSourcePrivateAVFObjC::player):
    (WebCore::MediaSourcePrivateAVFObjC::activeSourceBuffers):
    * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm: Added.
    (WebCore::MediaSourcePrivateAVFObjC::create):
    (WebCore::MediaSourcePrivateAVFObjC::MediaSourcePrivateAVFObjC):
    (WebCore::MediaSourcePrivateAVFObjC::~MediaSourcePrivateAVFObjC):
    (WebCore::MediaSourcePrivateAVFObjC::addSourceBuffer):
    (WebCore::MediaSourcePrivateAVFObjC::removeSourceBuffer):
    (WebCore::MediaSourcePrivateAVFObjC::duration):
    (WebCore::MediaSourcePrivateAVFObjC::setDuration):
    (WebCore::MediaSourcePrivateAVFObjC::markEndOfStream):
    (WebCore::MediaSourcePrivateAVFObjC::unmarkEndOfStream):
    (WebCore::MediaSourcePrivateAVFObjC::readyState):
    (WebCore::MediaSourcePrivateAVFObjC::setReadyState):
    (WebCore::MediaSourcePrivateAVFObjC::sourceBufferPrivateDidChangeActiveState):
    (WebCore::MediaSourcePrivateAVFObjCHasAudio):
    (WebCore::MediaSourcePrivateAVFObjC::hasAudio):
    (WebCore::MediaSourcePrivateAVFObjCHasVideo):
    (WebCore::MediaSourcePrivateAVFObjC::hasVideo):
    (WebCore::MediaSourcePrivateAVFObjC::seekToTime):
    
    Add a new SourceBufferPrivate implementation:
    * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h: Added.
    * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm: Added.
    (-[WebAVStreamDataParserListener initWithParser:parent:WebCore::]):
    (-[WebAVStreamDataParserListener dealloc]):
    (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:]):
    (-[WebAVStreamDataParserListener streamDataParser:didFailToParseStreamDataWithError:]):
    (-[WebAVStreamDataParserListener streamDataParser:didProvideMediaData:forTrackID:mediaType:flags:]):
    (-[WebAVStreamDataParserListener streamDataParser:didReachEndOfTrackWithTrackID:mediaType:]):
    (WebCore::MediaSampleAVFObjC::create):
    (WebCore::MediaSampleAVFObjC::~MediaSampleAVFObjC):
    (WebCore::MediaSampleAVFObjC::MediaSampleAVFObjC):
    (WebCore::MediaSampleAVFObjC::platformSample):
    (WebCore::CMSampleBufferIsRandomAccess):
    (WebCore::MediaSampleAVFObjC::flags):
    (WebCore::MediaDescriptionAVFObjC::create):
    (WebCore::MediaDescriptionAVFObjC::~MediaDescriptionAVFObjC):
    (WebCore::MediaDescriptionAVFObjC::MediaDescriptionAVFObjC):
    (WebCore::SourceBufferPrivateAVFObjC::create):
    (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
    (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
    (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset):
    (WebCore::SourceBufferPrivateAVFObjC::didFailToParseStreamDataWithError):
    (WebCore::callProcessCodedFrameForEachSample):
    (WebCore::SourceBufferPrivateAVFObjC::didProvideMediaDataForTrackID):
    (WebCore::SourceBufferPrivateAVFObjC::processCodedFrame):
    (WebCore::SourceBufferPrivateAVFObjC::didReachEndOfTrackWithTrackID):
    (WebCore::SourceBufferPrivateAVFObjC::setClient):
    (WebCore::SourceBufferPrivateAVFObjC::append):
    (WebCore::SourceBufferPrivateAVFObjC::abort):
    (WebCore::SourceBufferPrivateAVFObjC::removedFromMediaSource):
    (WebCore::SourceBufferPrivateAVFObjC::readyState):
    (WebCore::SourceBufferPrivateAVFObjC::setReadyState):
    (WebCore::SourceBufferPrivateAVFObjC::evictCodedFrames):
    (WebCore::SourceBufferPrivateAVFObjC::isFull):
    (WebCore::SourceBufferPrivateAVFObjC::hasVideo):
    (WebCore::SourceBufferPrivateAVFObjC::hasAudio):
    (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
    (WebCore::createNonDisplayingCopy):
    (WebCore::SourceBufferPrivateAVFObjC::flushAndEnqueueNonDisplayingSamples):
    (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):
    (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples):
    (WebCore::SourceBufferPrivateAVFObjC::setActive):
    (WebCore::SourceBufferPrivateAVFObjC::fastSeekTimeForMediaTime):
    (WebCore::SourceBufferPrivateAVFObjC::seekToTime):
    * platform/mac/PlatformClockCM.h:
    
    Add a SOFT_LINK_CLASS_OPTIONAL macro:
    * platform/mac/SoftLinking.h:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160251 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    1dfc3a43