Skip to content
  • commit-queue@webkit.org's avatar
    [GStreamer] Support audio and video tracks · 942857c8
    commit-queue@webkit.org authored
    https://bugs.webkit.org/show_bug.cgi?id=117039
    
    Patch by Brendan Long <b.long@cablelabs.com> on 2013-11-01
    Reviewed by Philippe Normand.
    
    Source/WebCore:
    
    Tests: media/track/audio/audio-track-mkv-vorbis-addtrack.html
           media/track/audio/audio-track-mkv-vorbis-enabled.html
           media/track/audio/audio-track-mkv-vorbis-language.html
           media/track/in-band/track-in-band-kate-ogg-addtrack.html
           media/track/in-band/track-in-band-srt-mkv-addtrack.html
           media/track/video/video-track-mkv-theora-addtrack.html
           media/track/video/video-track-mkv-theora-language.html
           media/track/video/video-track-mkv-theora-selected.html
    
    * GNUmakefile.list.am: Add audio and video track files.
    * PlatformEfl.cmake: Same.
    * html/HTMLMediaElement.cpp:
    (WebCore::HTMLMediaElement::audioTrackEnabledChanged): Schedule "change" event.
    (WebCore::HTMLMediaElement::videoTrackSelectedChanged): Same.
    * html/track/AudioTrack.cpp:
    (WebCore::AudioTrack::setEnabled): Call m_private->setEnabled
    (WebCore::AudioTrack::enabledChanged): Added callback.
    (WebCore::AudioTrack::labelChanged): Same.
    (WebCore::AudioTrack::languageChanged): Same.
    (WebCore::AudioTrack::willRemoveAudioTrackPrivate): Use ASSERT_UNUSED for consistence.
    * html/track/AudioTrack.h: Add new enabled, label and language callbacks.
    * html/track/VideoTrack.cpp:
    (WebCore::VideoTrack::setSelected): Call m_private->setEnabled
    (WebCore::VideoTrack::selectedChanged): Added callback.
    (WebCore::VideoTrack::labelChanged): Same.
    (WebCore::VideoTrack::languageChanged): Same.
    (WebCore::VideoTrack::willRemoveVideoTrackPrivate): Use ASSERT_UNUSED for consistence.
    * html/track/VideoTrack.h: Add new selected, label and language callbacks.
    * platform/graphics/AudioTrackPrivate.h:
    (WebCore::AudioTrackPrivate::setEnabled): Call m_client->enabledChanged
    * platform/graphics/VideoTrackPrivate.h:
    (WebCore::VideoTrackPrivate::setSelected): Call m_client->selectedChanged
    * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
    (WebCore::InbandTextTrackPrivateGStreamer::InbandTextTrackPrivateGStreamer): Add ASSERT(m_pad)
    (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfTagsChanged): Look at all tag events instead of just the first one.
    * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
    (WebCore::mediaPlayerPrivateVideoSinkCapsChangedCallback): Separated callback when caps change from callback when number of videos change.
    (WebCore::mediaPlayerPrivateVideoCapsChangeTimeoutCallback): Same.
    (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer): Initialize m_videoCapsTimerHandler.
    (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer): Disconnect audio and video tracks and remove callbacks.
    (WebCore::MediaPlayerPrivateGStreamer::videoCapsChanged): Separated callback when caps change from callback when number of videos change.
    (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo): Create video tracks for each stream.
    (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideoCaps): Separated callback when caps change from callback when number of videos change.
    (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio): Create audio tracks for each stream.
    * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Add audio and video tracks, and a pointer to keep track of the default audio stream.
    * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp: Added.
    * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h: Added.
    * platform/graphics/gstreamer/GRefPtrGStreamer.cpp: Add GRefPtr<GstTagList>
    * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp: Added, handles tags and "active" property of audio and video tracks.
    * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h: Added.
    * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp: Added.
    * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h: Added.
    
    LayoutTests:
    
    * media/content/two-audio-and-video-tracks.mkv: Added.
    * media/in-band-tracks.js: Renamed from LayoutTests/media/in-band-cues.js.
    (testAddTrack): Tests addtrack events.
    (testAttribute): Added "type" parameter so we can use this for audio and video tracks.
    (testTextTrackMode): Renamed to make it clear that this only applies to text tracks.
    (testCueStyle): Same.
    (testTextTrackOrder): Same.
    * media/track/audio/audio-track-mkv-vorbis-addtrack-expected.txt: Added.
    * media/track/audio/audio-track-mkv-vorbis-addtrack.html: Copied from LayoutTests/media/track/in-band/track-in-band-srt-mkv-track-order.html.
    * media/track/audio/audio-track-mkv-vorbis-enabled-expected.txt: Added.
    * media/track/audio/audio-track-mkv-vorbis-enabled.html: Added.
    * media/track/audio/audio-track-mkv-vorbis-language-expected.txt: Added.
    * media/track/audio/audio-track-mkv-vorbis-language.html: Copied from LayoutTests/media/track/in-band/track-in-band-kate-ogg-track-order.html.
    * media/track/in-band/track-in-band-kate-ogg-addtrack-expected.txt: Added.
    * media/track/in-band/track-in-band-kate-ogg-addtrack.html: Copied from LayoutTests/media/track/in-band/track-in-band-srt-mkv-track-order.html.
    * media/track/in-band/track-in-band-kate-ogg-cues-added-once.html: Added.
    * media/track/in-band/track-in-band-kate-ogg-kind.html: Added.
    * media/track/in-band/track-in-band-kate-ogg-language.html: Added.
    * media/track/in-band/track-in-band-kate-ogg-mode.html: Added.
    * media/track/in-band/track-in-band-kate-ogg-style.html: Added.
    * media/track/in-band/track-in-band-kate-ogg-track-order.html: Added.
    * media/track/in-band/track-in-band-srt-mkv-addtrack-expected.txt: Added.
    * media/track/in-band/track-in-band-srt-mkv-addtrack.html: Copied from LayoutTests/media/track/in-band/track-in-band-srt-mkv-track-order.html.
    * media/track/in-band/track-in-band-srt-mkv-cues-added-once.html: Added.
    * media/track/in-band/track-in-band-srt-mkv-kind.html: Added.
    * media/track/in-band/track-in-band-srt-mkv-language.html: Added.
    * media/track/in-band/track-in-band-srt-mkv-mode.html: Added.
    * media/track/in-band/track-in-band-srt-mkv-style.html: Added.
    * media/track/in-band/track-in-band-srt-mkv-track-order.html: Added.
    * media/track/video/video-track-mkv-theora-addtrack-expected.txt: Added.
    * media/track/video/video-track-mkv-theora-addtrack.html: Copied from LayoutTests/media/track/in-band/track-in-band-srt-mkv-track-order.html.
    * media/track/video/video-track-mkv-theora-language-expected.txt: Added.
    * media/track/video/video-track-mkv-theora-language.html: Copied from LayoutTests/media/track/in-band/track-in-band-kate-ogg-track-order.html.
    * media/track/video/video-track-mkv-theora-selected-expected.txt: Added.
    * media/track/video/video-track-mkv-theora-selected.html: Added.
    * platform/mac/TestExpectations: Ignore audio and video track tests on mac.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158436 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    942857c8