Changeset 208943 in webkit


Ignore:
Timestamp:
Nov 21, 2016 1:39:26 AM (7 years ago)
Author:
Philippe Normand
Message:

[Gstreamer] Add volume and mute support to the WebRTC mediaplayer
https://bugs.webkit.org/show_bug.cgi?id=153828

Reviewed by Darin Adler.

  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:

(WebCore::MediaPlayerPrivateGStreamerOwr::setVolume): New implementation setting the OWR source volume property.
(WebCore::MediaPlayerPrivateGStreamerOwr::setMuted): New implementation setting the OWR source mute property.
(WebCore::MediaPlayerPrivateGStreamerOwr::maybeHandleChangeMutedState): Also set audio OWR source mute state depending on the track enabled state.
(WebCore::MediaPlayerPrivateGStreamerOwr::trackEnabledChanged): chain to maybeHandleChangeMuteState.

  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r208942 r208943  
     12016-11-21  Philippe Normand  <pnormand@igalia.com>
     2
     3        [Gstreamer] Add volume and mute support to the WebRTC mediaplayer
     4        https://bugs.webkit.org/show_bug.cgi?id=153828
     5
     6        Reviewed by Darin Adler.
     7
     8        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:
     9        (WebCore::MediaPlayerPrivateGStreamerOwr::setVolume): New implementation setting the OWR source volume property.
     10        (WebCore::MediaPlayerPrivateGStreamerOwr::setMuted): New implementation setting the OWR source mute property.
     11        (WebCore::MediaPlayerPrivateGStreamerOwr::maybeHandleChangeMutedState): Also set audio OWR source mute state depending on the track enabled state.
     12        (WebCore::MediaPlayerPrivateGStreamerOwr::trackEnabledChanged): chain to maybeHandleChangeMuteState.
     13        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h:
     14
    1152016-11-21  Alejandro G. Castro  <alex@igalia.com> and Philippe Normand  <pnormand@igalia.com>
    216
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp

    r208676 r208943  
    3131#include "RealtimeMediaSourceOwr.h"
    3232#include "URL.h"
    33 #include <gst/audio/streamvolume.h>
    3433#include <owr/owr.h>
    3534#include <owr/owr_gst_audio_renderer.h>
     
    10099{
    101100    return m_audioTrack;
     101}
     102
     103void MediaPlayerPrivateGStreamerOwr::setVolume(float volume)
     104{
     105    if (!m_audioTrack)
     106        return;
     107
     108    auto& realTimeMediaSource = static_cast<RealtimeMediaSourceOwr&>(m_audioTrack->source());
     109    auto mediaSource = OWR_MEDIA_SOURCE(realTimeMediaSource.mediaSource());
     110
     111    GST_DEBUG("Setting volume: %f", volume);
     112    g_object_set(mediaSource, "volume", static_cast<gdouble>(volume), nullptr);
     113}
     114
     115void MediaPlayerPrivateGStreamerOwr::setMuted(bool muted)
     116{
     117    if (!m_audioTrack)
     118        return;
     119
     120    auto& realTimeMediaSource = static_cast<RealtimeMediaSourceOwr&>(m_audioTrack->source());
     121    auto mediaSource = OWR_MEDIA_SOURCE(realTimeMediaSource.mediaSource());
     122    if (!mediaSource)
     123        return;
     124
     125    GST_DEBUG("Setting mute: %s", muted ? "on":"off");
     126    g_object_set(mediaSource, "mute", muted, nullptr);
    102127}
    103128
     
    301326void MediaPlayerPrivateGStreamerOwr::maybeHandleChangeMutedState(MediaStreamTrackPrivate& track)
    302327{
    303     auto realTimeMediaSource = reinterpret_cast<RealtimeMediaSourceOwr*>(&track.source());
    304     auto mediaSource = OWR_MEDIA_SOURCE(realTimeMediaSource->mediaSource());
    305 
    306     GST_DEBUG("%s track now %s", track.type() == RealtimeMediaSource::Audio ? "audio":"video", realTimeMediaSource->muted() ? "muted":"un-muted");
     328    auto& realTimeMediaSource = static_cast<RealtimeMediaSourceOwr&>(track.source());
     329    auto mediaSource = OWR_MEDIA_SOURCE(realTimeMediaSource.mediaSource());
     330
     331    GST_DEBUG("%s track now %s", track.type() == RealtimeMediaSource::Audio ? "audio":"video", realTimeMediaSource.muted() ? "muted":"un-muted");
    307332    switch (track.type()) {
    308333    case RealtimeMediaSource::Audio:
    309         if (!realTimeMediaSource->muted()) {
     334        if (!realTimeMediaSource.muted()) {
    310335            g_object_set(m_audioRenderer.get(), "disabled", false, nullptr);
    311336            owr_media_renderer_set_source(OWR_MEDIA_RENDERER(m_audioRenderer.get()), mediaSource);
     
    314339            owr_media_renderer_set_source(OWR_MEDIA_RENDERER(m_audioRenderer.get()), nullptr);
    315340        }
     341        if (mediaSource)
     342            g_object_set(mediaSource, "mute", !track.enabled(), nullptr);
    316343        break;
    317344    case RealtimeMediaSource::Video:
    318         if (!realTimeMediaSource->muted()) {
     345        if (!realTimeMediaSource.muted()) {
    319346            g_object_set(m_videoRenderer.get(), "disabled", false, nullptr);
    320347            owr_media_renderer_set_source(OWR_MEDIA_RENDERER(m_videoRenderer.get()), mediaSource);
     
    334361}
    335362
    336 void MediaPlayerPrivateGStreamerOwr::trackEnabledChanged(MediaStreamTrackPrivate&)
    337 {
    338     GST_DEBUG("Track enabled changed");
     363void MediaPlayerPrivateGStreamerOwr::trackEnabledChanged(MediaStreamTrackPrivate& track)
     364{
     365    GST_DEBUG("%s track now %s", track.type() == RealtimeMediaSource::Audio ? "audio":"video", track.enabled() ? "enabled":"disabled");
     366    maybeHandleChangeMutedState(track);
    339367}
    340368
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h

    r204410 r208943  
    4141    static void registerMediaEngine(MediaEngineRegistrar);
    4242
    43     void setSize(const IntSize&) override;
     43    void setSize(const IntSize&) final;
    4444
    4545private:
    46     GstElement* createVideoSink() override;
    47     GstElement* audioSink() const override { return m_audioSink.get(); }
    48     bool isLiveStream() const override { return true; }
     46    GstElement* createVideoSink() final;
     47    GstElement* audioSink() const final { return m_audioSink.get(); }
     48    bool isLiveStream() const final { return true; }
    4949
    50     String engineDescription() const override { return "OpenWebRTC"; }
     50    String engineDescription() const final { return "OpenWebRTC"; }
    5151
    52     void load(const String&) override;
     52    void load(const String&) final;
    5353#if ENABLE(MEDIA_SOURCE)
    54     void load(const String&, MediaSourcePrivateClient*) override;
     54    void load(const String&, MediaSourcePrivateClient*) final;
    5555#endif
    56     void load(MediaStreamPrivate&) override;
    57     void cancelLoad() override { }
     56    void load(MediaStreamPrivate&) final;
     57    void cancelLoad() final { }
    5858
    59     void prepareToPlay() override { }
    60     void play() override;
    61     void pause() override;
     59    void prepareToPlay() final { }
     60    void play() final;
     61    void pause() final;
    6262
    63     bool hasVideo() const override;
    64     bool hasAudio() const override;
     63    bool hasVideo() const final;
     64    bool hasAudio() const final;
    6565
    66     float duration() const override { return 0; }
     66    float duration() const final { return 0; }
    6767
    68     float currentTime() const override;
    69     void seek(float) override { }
    70     bool seeking() const override { return false; }
     68    float currentTime() const final;
     69    void seek(float) final { }
     70    bool seeking() const final { return false; }
    7171
    72     void setRate(float) override { }
    73     void setPreservesPitch(bool) override { }
    74     bool paused() const override { return m_paused; }
     72    void setRate(float) final { }
     73    void setPreservesPitch(bool) final { }
     74    bool paused() const final { return m_paused; }
    7575
    76     bool hasClosedCaptions() const override { return false; }
    77     void setClosedCaptionsVisible(bool) override { };
     76    void setVolume(float) final;
     77    void setMuted(bool) final;
    7878
    79     float maxTimeSeekable() const override { return 0; }
    80     std::unique_ptr<PlatformTimeRanges> buffered() const override { return std::make_unique<PlatformTimeRanges>(); }
    81     bool didLoadingProgress() const override;
     79    bool hasClosedCaptions() const final { return false; }
     80    void setClosedCaptionsVisible(bool) final { };
    8281
    83     unsigned long long totalBytes() const override { return 0; }
     82    float maxTimeSeekable() const final { return 0; }
     83    std::unique_ptr<PlatformTimeRanges> buffered() const final { return std::make_unique<PlatformTimeRanges>(); }
     84    bool didLoadingProgress() const final;
    8485
    85     bool canLoadPoster() const override { return false; }
    86     void setPoster(const String&) override { }
     86    unsigned long long totalBytes() const final { return 0; }
     87
     88    bool canLoadPoster() const final { return false; }
     89    void setPoster(const String&) final { }
    8790
    8891    // MediaStreamTrackPrivate::Observer implementation.
Note: See TracChangeset for help on using the changeset viewer.