Changeset 140685 in webkit
- Timestamp:
- Jan 24, 2013 8:16:42 AM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r140683 r140685 1 2013-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 1 20 2013-01-24 Zoltan Arvai <zarvai@inf.u-szeged.hu> 2 21 -
trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
r140532 r140685 251 251 , m_totalBytes(-1) 252 252 , m_originalPreloadWasAutoAndWasOverridden(false) 253 , m_preservesPitch(false) 253 254 { 254 255 } … … 739 740 else 740 741 g_object_set(m_playBin.get(), "mute", mute, NULL); 742 } 743 744 void MediaPlayerPrivateGStreamer::setPreservesPitch(bool preservesPitch) 745 { 746 m_preservesPitch = preservesPitch; 741 747 } 742 748 … … 1796 1802 } 1797 1803 1804 void 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 1798 1838 void MediaPlayerPrivateGStreamer::createGSTPlayBin() 1799 1839 { … … 1831 1871 1832 1872 #ifndef GST_API_VERSION_1 1833 m_videoSinkBin = gst_bin_new(" sink");1873 m_videoSinkBin = gst_bin_new("video-sink"); 1834 1874 1835 1875 GstElement* videoTee = gst_element_factory_make("tee", "videoTee"); … … 1908 1948 g_signal_connect(videoSinkPad.get(), "notify::caps", G_CALLBACK(mediaPlayerPrivateVideoSinkCapsChangedCallback), this); 1909 1949 1950 createAudioSink(); 1910 1951 } 1911 1952 -
trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h
r140414 r140685 73 73 74 74 void setRate(float); 75 void setPreservesPitch(bool); 75 76 76 77 void setVolume(float); … … 138 139 139 140 void updateAudioSink(); 141 void createAudioSink(); 140 142 141 143 float playbackPosition() const; … … 206 208 KURL m_url; 207 209 bool m_originalPreloadWasAutoAndWasOverridden; 210 bool m_preservesPitch; 208 211 }; 209 212 }
Note: See TracChangeset
for help on using the changeset viewer.