Changeset 197023 in webkit


Ignore:
Timestamp:
Feb 24, 2016 2:12:54 AM (8 years ago)
Author:
commit-queue@webkit.org
Message:

[Gstreamer] Mediaplayer should observe the tracks and not the source
https://bugs.webkit.org/show_bug.cgi?id=154582

Patch by Alejandro G. Castro <alex@igalia.com> on 2016-02-24
Reviewed by Philippe Normand.

We have to observe the track objects that define the
mediastream. Replace the source attributes with the new tracks and
use them properly in the class.

  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:

(WebCore::MediaPlayerPrivateGStreamerOwr::~MediaPlayerPrivateGStreamerOwr):
Make sure we are not observing anymore the tracks after
destruction.
(WebCore::MediaPlayerPrivateGStreamerOwr::hasVideo): Used the track
instead of the source.
(WebCore::MediaPlayerPrivateGStreamerOwr::hasAudio): Ditto.
(WebCore::MediaPlayerPrivateGStreamerOwr::currentTime): Ditto.
(WebCore::MediaPlayerPrivateGStreamerOwr::internalLoad): Ditto.
(WebCore::MediaPlayerPrivateGStreamerOwr::stop): Ditto.
(WebCore::MediaPlayerPrivateGStreamerOwr::trackEnded): Added, new
track observer API, make sure we disable the ended tracks.
(WebCore::MediaPlayerPrivateGStreamerOwr::trackMutedChanged):
Added, new track observer API.
(WebCore::MediaPlayerPrivateGStreamerOwr::trackSettingsChanged):
Added, new track observer API.
(WebCore::MediaPlayerPrivateGStreamerOwr::trackEnabledChanged):
Added, new track observer API.
(WebCore::MediaPlayerPrivateGStreamerOwr::sourceStopped): Deleted,
source observer API.
(WebCore::MediaPlayerPrivateGStreamerOwr::sourceMutedChanged):
Deleted, source observer API.
(WebCore::MediaPlayerPrivateGStreamerOwr::sourceSettingsChanged):
Deleted, source observer API.
(WebCore::MediaPlayerPrivateGStreamerOwr::preventSourceFromStopping):
Deleted, source observer API.

  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h:

Replaced the attributes representing the source with the tracks
and added the new track observer functions.

Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r197022 r197023  
     12016-02-24  Alejandro G. Castro  <alex@igalia.com>
     2
     3        [Gstreamer] Mediaplayer should observe the tracks and not the source
     4        https://bugs.webkit.org/show_bug.cgi?id=154582
     5
     6        Reviewed by Philippe Normand.
     7
     8        We have to observe the track objects that define the
     9        mediastream. Replace the source attributes with the new tracks and
     10        use them properly in the class.
     11
     12        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:
     13        (WebCore::MediaPlayerPrivateGStreamerOwr::~MediaPlayerPrivateGStreamerOwr):
     14        Make sure we are not observing anymore the tracks after
     15        destruction.
     16        (WebCore::MediaPlayerPrivateGStreamerOwr::hasVideo): Used the track
     17        instead of the source.
     18        (WebCore::MediaPlayerPrivateGStreamerOwr::hasAudio): Ditto.
     19        (WebCore::MediaPlayerPrivateGStreamerOwr::currentTime): Ditto.
     20        (WebCore::MediaPlayerPrivateGStreamerOwr::internalLoad): Ditto.
     21        (WebCore::MediaPlayerPrivateGStreamerOwr::stop): Ditto.
     22        (WebCore::MediaPlayerPrivateGStreamerOwr::trackEnded): Added, new
     23        track observer API, make sure we disable the ended tracks.
     24        (WebCore::MediaPlayerPrivateGStreamerOwr::trackMutedChanged):
     25        Added, new track observer API.
     26        (WebCore::MediaPlayerPrivateGStreamerOwr::trackSettingsChanged):
     27        Added, new track observer API.
     28        (WebCore::MediaPlayerPrivateGStreamerOwr::trackEnabledChanged):
     29        Added, new track observer API.
     30        (WebCore::MediaPlayerPrivateGStreamerOwr::sourceStopped): Deleted,
     31        source observer API.
     32        (WebCore::MediaPlayerPrivateGStreamerOwr::sourceMutedChanged):
     33        Deleted, source observer API.
     34        (WebCore::MediaPlayerPrivateGStreamerOwr::sourceSettingsChanged):
     35        Deleted, source observer API.
     36        (WebCore::MediaPlayerPrivateGStreamerOwr::preventSourceFromStopping):
     37        Deleted, source observer API.
     38        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h:
     39        Replaced the attributes representing the source with the tracks
     40        and added the new track observer functions.
     41
    1422016-02-23  Sergio Villar Senin  <svillar@igalia.com>
    243
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp

    r196117 r197023  
    5757    LOG_MEDIA_MESSAGE("Destroying");
    5858
     59    if (hasAudio())
     60        m_audioTrack->removeObserver(*this);
     61    if (hasVideo())
     62        m_videoTrack->removeObserver(*this);
     63
    5964    stop();
    6065}
     
    8388bool MediaPlayerPrivateGStreamerOwr::hasVideo() const
    8489{
    85     return m_videoSource;
     90    return m_videoTrack;
    8691}
    8792
    8893bool MediaPlayerPrivateGStreamerOwr::hasAudio() const
    8994{
    90     return m_audioSource;
     95    return m_audioTrack;
    9196}
    9297
     
    96101    GstQuery* query = gst_query_new_position(GST_FORMAT_TIME);
    97102
    98     if (m_videoSource && gst_element_query(m_videoSink.get(), query))
     103    if (m_videoTrack && gst_element_query(m_videoSink.get(), query))
    99104        gst_query_parse_position(query, 0, &position);
    100     else if (m_audioSource && gst_element_query(m_audioSink.get(), query))
     105    else if (m_audioTrack && gst_element_query(m_audioSink.get(), query))
    101106        gst_query_parse_position(query, 0, &position);
    102107
     
    182187        }
    183188
    184         RealtimeMediaSourceOwr* source = reinterpret_cast<RealtimeMediaSourceOwr*>(&track->source());
    185         OwrMediaSource* mediaSource = OWR_MEDIA_SOURCE(source->mediaSource());
     189        OwrMediaSource* mediaSource = OWR_MEDIA_SOURCE(reinterpret_cast<RealtimeMediaSourceOwr*>(&track->source())->mediaSource());
    186190
    187191        switch (track->type()) {
    188192        case RealtimeMediaSource::Audio:
    189             if (m_audioSource && (m_audioSource.get() == source))
     193            if (m_audioTrack && (m_audioTrack.get() == track))
    190194                g_object_set(m_audioRenderer.get(), "disabled", FALSE, nullptr);
    191195
    192196            owr_media_renderer_set_source(OWR_MEDIA_RENDERER(m_audioRenderer.get()), mediaSource);
    193             m_audioSource = source;
    194             source->addObserver(this);
     197            m_audioTrack = track;
     198            track->addObserver(*this);
    195199            break;
    196200        case RealtimeMediaSource::Video:
    197             if (m_videoSource && (m_videoSource.get() == source))
     201            if (m_videoTrack && (m_videoTrack.get() == track))
    198202                g_object_set(m_videoRenderer.get(), "disabled", FALSE, nullptr);
    199203
     
    202206            g_object_set(m_videoRenderer.get(), "width", 640, "height", 480, nullptr);
    203207            owr_media_renderer_set_source(OWR_MEDIA_RENDERER(m_videoRenderer.get()), mediaSource);
    204             m_videoSource = source;
    205             source->addObserver(this);
     208            m_videoTrack = track;
     209            track->addObserver(*this);
    206210            break;
    207211        case RealtimeMediaSource::None:
     
    221225
    222226    m_stopped = true;
    223     if (m_audioSource) {
     227    if (m_audioTrack) {
    224228        LOG_MEDIA_MESSAGE("Stop: disconnecting audio");
    225229        g_object_set(m_audioRenderer.get(), "disabled", TRUE, nullptr);
    226230    }
    227     if (m_videoSource) {
     231    if (m_videoTrack) {
    228232        LOG_MEDIA_MESSAGE("Stop: disconnecting video");
    229233        g_object_set(m_videoRenderer.get(), "disabled", TRUE, nullptr);
     
    277281}
    278282
    279 void MediaPlayerPrivateGStreamerOwr::sourceStopped()
    280 {
    281     LOG_MEDIA_MESSAGE("Source stopped");
     283void MediaPlayerPrivateGStreamerOwr::trackEnded(MediaStreamTrackPrivate& track)
     284{
     285    LOG_MEDIA_MESSAGE("Track ended");
    282286
    283287    if (!m_streamPrivate || !m_streamPrivate->active()) {
     
    286290    }
    287291
    288     for (auto& track : m_streamPrivate->tracks()) {
    289         auto* source = reinterpret_cast<RealtimeMediaSourceOwr*>(&track->source());
    290         if (track->enabled())
    291             continue;
    292         if (source == m_audioSource)
    293             g_object_set(m_audioRenderer.get(), "disabled", TRUE, nullptr);
    294         else if (source == m_videoSource)
    295             g_object_set(m_videoRenderer.get(), "disabled", TRUE, nullptr);
    296     }
    297 }
    298 
    299 void MediaPlayerPrivateGStreamerOwr::sourceMutedChanged()
    300 {
    301     LOG_MEDIA_MESSAGE("Source muted state changed");
    302 }
    303 
    304 void MediaPlayerPrivateGStreamerOwr::sourceSettingsChanged()
    305 {
    306     LOG_MEDIA_MESSAGE("Source settings changed");
    307 }
    308 
    309 bool MediaPlayerPrivateGStreamerOwr::preventSourceFromStopping()
    310 {
    311     LOG_MEDIA_MESSAGE("Prevent source from stopping");
    312     return false;
     292    if (&track == m_audioTrack)
     293        g_object_set(m_audioRenderer.get(), "disabled", TRUE, nullptr);
     294    else if (&track == m_videoTrack)
     295        g_object_set(m_videoRenderer.get(), "disabled", TRUE, nullptr);
     296}
     297
     298void MediaPlayerPrivateGStreamerOwr::trackMutedChanged(MediaStreamTrackPrivate&)
     299{
     300    LOG_MEDIA_MESSAGE("Track muted state changed");
     301}
     302
     303void MediaPlayerPrivateGStreamerOwr::trackSettingsChanged(MediaStreamTrackPrivate&)
     304{
     305    LOG_MEDIA_MESSAGE("Track settings changed");
     306}
     307
     308void MediaPlayerPrivateGStreamerOwr::trackEnabledChanged(MediaStreamTrackPrivate&)
     309{
     310    LOG_MEDIA_MESSAGE("Track enabled changed");
    313311}
    314312
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h

    r196117 r197023  
    2424
    2525#include "MediaPlayerPrivateGStreamerBase.h"
    26 #include "RealtimeMediaSource.h"
     26#include "MediaStreamTrackPrivate.h"
    2727
    2828typedef struct _OwrGstVideoRenderer OwrGstVideoRenderer;
     
    3434class RealtimeMediaSourceOwr;
    3535
    36 class MediaPlayerPrivateGStreamerOwr : public MediaPlayerPrivateGStreamerBase, private RealtimeMediaSource::Observer {
     36class MediaPlayerPrivateGStreamerOwr : public MediaPlayerPrivateGStreamerBase, private MediaStreamTrackPrivate::Observer {
    3737public:
    3838    explicit MediaPlayerPrivateGStreamerOwr(MediaPlayer*);
     
    8484    void setPoster(const String&) override { }
    8585
    86     // RealtimeMediaSource::Observer implementation.
    87     void sourceStopped() override final;
    88     void sourceMutedChanged() override final;
    89     void sourceSettingsChanged() override final;
    90     bool preventSourceFromStopping() override final;
     86    // MediaStreamTrackPrivate::Observer implementation.
     87    void trackEnded(MediaStreamTrackPrivate&) override final;
     88    void trackMutedChanged(MediaStreamTrackPrivate&) override final;
     89    void trackSettingsChanged(MediaStreamTrackPrivate&) override final;
     90    void trackEnabledChanged(MediaStreamTrackPrivate&) override final;
    9191
    9292    static void getSupportedTypes(HashSet<String, ASCIICaseInsensitiveHash>&);
     
    100100    bool m_paused { true };
    101101    bool m_stopped { true };
    102     RefPtr<RealtimeMediaSourceOwr> m_videoSource;
    103     RefPtr<RealtimeMediaSourceOwr> m_audioSource;
     102    RefPtr<MediaStreamTrackPrivate> m_videoTrack;
     103    RefPtr<MediaStreamTrackPrivate> m_audioTrack;
    104104    GRefPtr<GstElement> m_audioSink;
    105105    RefPtr<MediaStreamPrivate> m_streamPrivate;
Note: See TracChangeset for help on using the changeset viewer.