Changeset 52247 in webkit
- Timestamp:
- Dec 17, 2009 4:13:04 AM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r52246 r52247 1 2009-11-11 Philippe Normand <pnormand@igalia.com> 2 3 Reviewed by Gustavo Noronha Silva. 4 5 [GStreamer] Should emit {networkState,readyState,volume,time,size,rate,duration}Changed signals 6 https://bugs.webkit.org/show_bug.cgi?id=30377 7 8 Emit volumeChanged and durationChanged upon notification from 9 GStreamer. 10 11 * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp: 12 (WebCore::mediaPlayerPrivateMessageCallback): 13 (WebCore::mediaPlayerPrivateVolumeCallback): 14 (WebCore::notify_volume_idle_cb): 15 (WebCore::MediaPlayerPrivate::didEnd): 16 (WebCore::MediaPlayerPrivate::durationChanged): 17 (WebCore::MediaPlayerPrivate::createGSTPlayBin): 18 * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h: 19 20 2009-12-16 Philippe Normand <pnormand@igalia.com> 21 22 Reviewed by Gustavo Noronha Silva. 23 24 [GTK] segfault during volume notification 25 https://bugs.webkit.org/show_bug.cgi?id=32603 26 27 Emit volumeChanged and durationChanged upon notification from 28 GStreamer. Also don't reset the volume property on playbin, it is 29 not needed as it is 1.0 by default both on playbin and in the 30 MediaPlayer. 31 32 * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp: 33 (WebCore::mediaPlayerPrivateMessageCallback): 34 (WebCore::mediaPlayerPrivateVolumeChangedCallback): 35 (WebCore::notifyVolumeIdleCallback): 36 (WebCore::doGstInit): 37 (WebCore::MediaPlayerPrivate::isAvailable): 38 (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): 39 (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate): 40 (WebCore::MediaPlayerPrivate::volumeChanged): 41 (WebCore::MediaPlayerPrivate::didEnd): 42 (WebCore::MediaPlayerPrivate::durationChanged): 43 (WebCore::mimeTypeCache): 44 (WebCore::MediaPlayerPrivate::createGSTPlayBin): 45 * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h: 46 1 47 2009-12-17 Martin Robinson <martin.james.robinson@gmail.com> 2 48 -
trunk/WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp
r52243 r52247 92 92 LOG_VERBOSE(Media, "Buffering %d", percent); 93 93 break; 94 case GST_MESSAGE_DURATION: 95 LOG_VERBOSE(Media, "Duration changed"); 96 mp->durationChanged(); 97 break; 94 98 default: 95 99 LOG_VERBOSE(Media, "Unhandled GStreamer message type: %s", … … 98 102 } 99 103 return true; 104 } 105 106 void mediaPlayerPrivateVolumeChangedCallback(GObject *element, GParamSpec *pspec, gpointer data) 107 { 108 MediaPlayerPrivate* mp = reinterpret_cast<MediaPlayerPrivate*>(data); 109 mp->volumeChanged(); 110 } 111 112 gboolean notifyVolumeIdleCallback(MediaPlayer* mp) 113 { 114 mp->volumeChanged(); 115 return FALSE; 100 116 } 101 117 … … 147 163 static bool gstInitialized = false; 148 164 149 static bool do _gst_init()165 static bool doGstInit() 150 166 { 151 167 // FIXME: We should pass the arguments from the command line … … 166 182 bool MediaPlayerPrivate::isAvailable() 167 183 { 168 if (!do _gst_init())184 if (!doGstInit()) 169 185 return false; 170 186 … … 194 210 , m_seeking(false) 195 211 , m_errorOccured(false) 196 { 197 do_gst_init(); 212 , m_volumeIdleId(-1) 213 { 214 doGstInit(); 198 215 } 199 216 200 217 MediaPlayerPrivate::~MediaPlayerPrivate() 201 218 { 219 if (m_volumeIdleId) { 220 g_source_remove(m_volumeIdleId); 221 m_volumeIdleId = -1; 222 } 223 202 224 if (m_buffer) 203 225 gst_buffer_unref(m_buffer); … … 405 427 } 406 428 429 void MediaPlayerPrivate::volumeChanged() 430 { 431 if (m_volumeIdleId) { 432 g_source_remove(m_volumeIdleId); 433 m_volumeIdleId = -1; 434 } 435 m_volumeIdleId = g_idle_add((GSourceFunc) notifyVolumeIdleCallback, m_player); 436 } 437 438 407 439 void MediaPlayerPrivate::setRate(float rate) 408 440 { … … 664 696 } 665 697 666 void MediaPlayerPrivate::volumeChanged()667 {668 m_player->volumeChanged();669 }670 671 698 void MediaPlayerPrivate::didEnd() 672 699 { 673 700 timeChanged(); 701 } 702 703 void MediaPlayerPrivate::durationChanged() 704 { 705 m_player->durationChanged(); 674 706 } 675 707 … … 752 784 { 753 785 754 do _gst_init();786 doGstInit(); 755 787 756 788 static HashSet<String> cache; … … 889 921 890 922 g_object_set(G_OBJECT(m_playBin), "uri", url.utf8().data(), 891 "volume", static_cast<double>(m_player->volume()), NULL); 923 NULL); 924 925 g_signal_connect(G_OBJECT(m_playBin), "notify::volume", G_CALLBACK(mediaPlayerPrivateVolumeChangedCallback), this); 892 926 893 927 m_videoSink = webkit_video_sink_new(); -
trunk/WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.h
r52191 r52247 40 40 namespace WebCore { 41 41 42 43 44 45 42 class GraphicsContext; 43 class IntSize; 44 class IntRect; 45 class String; 46 46 47 gboolean mediaPlayerPrivateMessageCallback(GstBus* bus, GstMessage* message, gpointer data); 47 gboolean mediaPlayerPrivateMessageCallback(GstBus* bus, GstMessage* message, gpointer data); 48 void mediaPlayerPrivateVolumeChangedCallback(GObject *element, GParamSpec *pspec, gpointer data); 48 49 49 50 class MediaPlayerPrivate : public MediaPlayerPrivateInterface { 50 51 friend gboolean mediaPlayerPrivateMessageCallback(GstBus* bus, GstMessage* message, gpointer data); 51 52 friend void mediaPlayerPrivateRepaintCallback(WebKitVideoSink*, GstBuffer *buffer, MediaPlayerPrivate* playerPrivate); … … 75 76 void setRate(float); 76 77 void setVolume(float); 78 void volumeChanged(); 77 79 78 80 int dataRate() const; … … 93 95 void sizeChanged(); 94 96 void timeChanged(); 95 void volumeChanged();96 97 void didEnd(); 98 void durationChanged(); 97 99 void loadingFailed(MediaPlayer::NetworkState); 98 100 … … 139 141 bool m_seeking; 140 142 bool m_errorOccured; 143 guint m_volumeIdleId; 141 144 }; 142 145 }
Note: See TracChangeset
for help on using the changeset viewer.