Changeset 140685 in webkit


Ignore:
Timestamp:
Jan 24, 2013 8:16:42 AM (11 years ago)
Author:
commit-queue@webkit.org
Message:

[GStreamer] Implement setPreservesPitch()
https://bugs.webkit.org/show_bug.cgi?id=31155

Enables audio pitch preservation by using the scaletempo GStreamer
element when required by the MediaPlayer.

Patch by Victor Jaquez <vjaquez@igalia.com> on 2013-01-24
Reviewed by Philippe Normand.

No new tests, but a layout test shall be implemented at some point
using WebAudio API.

  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:

(WebCore::MediaPlayerPrivateGStreamer::setPreservesPitch):
(WebCore):

  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

(MediaPlayerPrivateGStreamer):

Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r140683 r140685  
     12013-01-24  Victor Jaquez  <vjaquez@igalia.com>
     2
     3        [GStreamer] Implement setPreservesPitch()
     4        https://bugs.webkit.org/show_bug.cgi?id=31155
     5
     6        Enables audio pitch preservation by using the scaletempo GStreamer
     7        element when required by the MediaPlayer.
     8
     9        Reviewed by Philippe Normand.
     10
     11        No new tests, but a layout test shall be implemented at some point
     12        using WebAudio API.
     13
     14        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
     15        (WebCore::MediaPlayerPrivateGStreamer::setPreservesPitch):
     16        (WebCore):
     17        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
     18        (MediaPlayerPrivateGStreamer):
     19
    1202013-01-24  Zoltan Arvai  <zarvai@inf.u-szeged.hu>
    221
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp

    r140532 r140685  
    251251    , m_totalBytes(-1)
    252252    , m_originalPreloadWasAutoAndWasOverridden(false)
     253    , m_preservesPitch(false)
    253254{
    254255}
     
    739740    else
    740741        g_object_set(m_playBin.get(), "mute", mute, NULL);
     742}
     743
     744void MediaPlayerPrivateGStreamer::setPreservesPitch(bool preservesPitch)
     745{
     746    m_preservesPitch = preservesPitch;
    741747}
    742748
     
    17961802}
    17971803
     1804void MediaPlayerPrivateGStreamer::createAudioSink()
     1805{
     1806    // Construct audio sink if pitch preserving is enabled.
     1807    if (!m_preservesPitch)
     1808        return;
     1809
     1810    if (!m_playBin)
     1811        return;
     1812
     1813    GstElement* scale = gst_element_factory_make("scaletempo", 0);
     1814    if (!scale) {
     1815        GST_WARNING("Failed to create scaletempo");
     1816        return;
     1817    }
     1818
     1819    GstElement* convert = gst_element_factory_make("audioconvert", 0);
     1820    GstElement* resample = gst_element_factory_make("audioresample", 0);
     1821    GstElement* sink = gst_element_factory_make("autoaudiosink", 0);
     1822
     1823    GstElement* audioSink = gst_bin_new("audio-sink");
     1824    gst_bin_add_many(GST_BIN(audioSink), scale, convert, resample, sink, NULL);
     1825
     1826    if (!gst_element_link_many(scale, convert, resample, sink, NULL)) {
     1827        GST_WARNING("Failed to link audio sink elements");
     1828        gst_object_unref(audioSink);
     1829        return;
     1830    }
     1831
     1832    GRefPtr<GstPad> pad = adoptGRef(gst_element_get_static_pad(scale, "sink"));
     1833    gst_element_add_pad(audioSink, gst_ghost_pad_new("sink", pad.get()));
     1834
     1835    g_object_set(m_playBin.get(), "audio-sink", audioSink, NULL);
     1836}
     1837
    17981838void MediaPlayerPrivateGStreamer::createGSTPlayBin()
    17991839{
     
    18311871
    18321872#ifndef GST_API_VERSION_1
    1833     m_videoSinkBin = gst_bin_new("sink");
     1873    m_videoSinkBin = gst_bin_new("video-sink");
    18341874
    18351875    GstElement* videoTee = gst_element_factory_make("tee", "videoTee");
     
    19081948        g_signal_connect(videoSinkPad.get(), "notify::caps", G_CALLBACK(mediaPlayerPrivateVideoSinkCapsChangedCallback), this);
    19091949
     1950    createAudioSink();
    19101951}
    19111952
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h

    r140414 r140685  
    7373
    7474            void setRate(float);
     75            void setPreservesPitch(bool);
    7576
    7677            void setVolume(float);
     
    138139
    139140            void updateAudioSink();
     141            void createAudioSink();
    140142
    141143            float playbackPosition() const;
     
    206208            KURL m_url;
    207209            bool m_originalPreloadWasAutoAndWasOverridden;
     210            bool m_preservesPitch;
    208211    };
    209212}
Note: See TracChangeset for help on using the changeset viewer.