Skip to content
  • jer.noble@apple.com's avatar
    [Mac] Add support for VideoTrack to MediaPlayerPrivateAVFObjC · c5046445
    jer.noble@apple.com authored
    https://bugs.webkit.org/show_bug.cgi?id=122122
    
    Reviewed by Eric Carlson.
    
    Source/WebCore:
    
    Test: media/track/video-track.html
    
    Refactor the methods which query AVAssetTrack and AVPlayerItemTrack into an Impl class, and
    use that class to reset the properties of both AudioTrackAVFObjC and the new VideoTrackAVFObjC.
    
    Add new files to project:
    * WebCore.xcodeproj/project.pbxproj:
    
    Add the new implementation class, shared by AudioTrackAVFObjC and VideoTrackAVFObjC:
    * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h: Added.
    (WebCore::AVTrackPrivateAVFObjCImpl::create): Simple factory.
    (WebCore::AVTrackPrivateAVFObjCImpl::playerItemTrack): Simple getter.
    * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm: Added.
    (WebCore::AVTrackPrivateAVFObjCImpl::AVTrackPrivateAVFObjCImpl): Simple constructor.
    (WebCore::AVTrackPrivateAVFObjCImpl::enabled): Pass to AVPlayerItemTrack.
    (WebCore::AVTrackPrivateAVFObjCImpl::setEnabled): Ditto.
    (WebCore::AVTrackPrivateAVFObjCImpl::audioKind): Distinguish between Alternative and Main content.
    (WebCore::AVTrackPrivateAVFObjCImpl::videoKind): Distinguish between Alternative, Main, Caption,
        and Description content.
    (WebCore::AVTrackPrivateAVFObjCImpl::id): Pass to AVAssetTrack.
    (WebCore::AVTrackPrivateAVFObjCImpl::label): Retrieve the Title metadata in the user's preferred
        language.
    (WebCore::AVTrackPrivateAVFObjCImpl::language): Pass to languageForAVAssetTrack.
    (WebCore::AVTrackPrivateAVFObjCImpl::languageForAVAssetTrack): Moved from AudioTrackPrivateAVFObjC.
    * platform/graphics/avfoundation/VideoTrackPrivateAVF.h: Copied from Source/WebCore/platform/graphics/avfoundation/AudioTrackPrivateAVF.h.
    (WebCore::VideoTrackPrivateAVF::kind): Simple getter.
    (WebCore::VideoTrackPrivateAVF::id): Ditto.
    (WebCore::VideoTrackPrivateAVF::label): Ditto.
    (WebCore::VideoTrackPrivateAVF::language): Ditto.
    (WebCore::VideoTrackPrivateAVF::setKind): Simple setter.
    (WebCore::VideoTrackPrivateAVF::setId): Ditto.
    (WebCore::VideoTrackPrivateAVF::setLabel): Ditto.
    (WebCore::VideoTrackPrivateAVF::setLanguage): Ditto.
    (WebCore::VideoTrackPrivateAVF::VideoTrackPrivateAVF): Simple constructor.
    * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.h:
    * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm:
    (WebCore::AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC): Create a AVTrackPrivateAVFObjCImpl.
    (WebCore::AudioTrackPrivateAVFObjC::resetPropertiesFromTrack): Retrieve properties from m_impl.
    (WebCore::AudioTrackPrivateAVFObjC::setPlayerItemTrack): Create a new AVTrackPrivateAVFObjCImpl.
    (WebCore::AudioTrackPrivateAVFObjC::playerItemTrack): Pass to m_impl.
    (WebCore::AudioTrackPrivateAVFObjC::setEnabled): Ditto.
    * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
    * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
    (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Refactor implementation into
        template method determineChangedTracksFromNewTracksAndOldItems().
    (WebCore::determineChangedTracksFromNewTracksAndOldItems): Refactored.
    (WebCore::MediaPlayerPrivateAVFoundationObjC::updateAudioTracks): Pass to determineChangedTracksFromNewTracksAndOldItems.
    (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoTracks): Ditto.
    (WebCore::MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack): Changed class hosting
        languageForAVAssetTrack.
    * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp: Added.
    (WebCore::VideoTrackPrivateAVFObjC::VideoTrackPrivateAVFObjC): Create a AVTrackPrivateAVFObjCImpl.
    (WebCore::VideoTrackPrivateAVFObjC::resetPropertiesFromTrack): Retrieve properties from m_impl.
    (WebCore::VideoTrackPrivateAVFObjC::setPlayerItemTrack): Create a new AVTrackPrivateAVFObjCImpl.
    (WebCore::VideoTrackPrivateAVFObjC::playerItemTrack): Pass to m_impl.
    (WebCore::VideoTrackPrivateAVFObjC::setSelected): Ditto.
    * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h: Added.
    (WebCore::VideoTrackPrivateAVFObjC::create): Simple factory.
    
    LayoutTests:
    
    * media/track/video-track-expected.txt: Added.
    * media/track/video-track.html: Added.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@156722 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    c5046445