Changeset 73014 in webkit
- Timestamp:
- Dec 1, 2010 3:41:04 AM (13 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r73012 r73014 1 2010-12-01 Philippe Normand <pnormand@igalia.com> 2 3 Reviewed by Martin Robinson. 4 5 Volume control not correctly initialized 6 https://bugs.webkit.org/show_bug.cgi?id=36299 7 8 Replaced the mute/volume Timers with g_timeouts which are (for 9 now, at least) more reliable than Timers for one-shot-fire-now 10 actions. 11 12 Test: media/video-volume.html 13 14 * platform/graphics/MediaPlayer.cpp: 15 (WebCore::MediaPlayer::~MediaPlayer): Reset the raw pointers to 0 16 when destructing the player. 17 * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: 18 (WebCore::mediaPlayerPrivateVolumeChangeTimeoutCallback): 19 (WebCore::mediaPlayerPrivateMuteChangeTimeoutCallback): 20 (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer): 21 (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVolumeChange): 22 (WebCore::MediaPlayerPrivateGStreamer::volumeChanged): 23 (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfMute): 24 (WebCore::MediaPlayerPrivateGStreamer::muteChanged): 25 (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Set 26 playbin2 volume/mute base on MediaPlayer related values. 27 * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: 28 1 29 2010-12-01 Patrick Gansterer <paroga@webkit.org> 2 30 -
trunk/WebCore/platform/graphics/MediaPlayer.cpp
r72184 r73014 269 269 MediaPlayer::~MediaPlayer() 270 270 { 271 m_mediaPlayerClient = 0; 271 272 } 272 273 -
trunk/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
r72793 r73014 178 178 } 179 179 180 gboolean mediaPlayerPrivateVolumeChangeTimeoutCallback(MediaPlayerPrivateGStreamer* player) 181 { 182 // This is the callback of the timeout source created in ::volumeChanged. 183 player->notifyPlayerOfVolumeChange(); 184 return FALSE; 185 } 186 180 187 void mediaPlayerPrivateMuteChangedCallback(GObject *element, GParamSpec *pspec, gpointer data) 181 188 { … … 183 190 MediaPlayerPrivateGStreamer* mp = reinterpret_cast<MediaPlayerPrivateGStreamer*>(data); 184 191 mp->muteChanged(); 192 } 193 194 gboolean mediaPlayerPrivateMuteChangeTimeoutCallback(MediaPlayerPrivateGStreamer* player) 195 { 196 // This is the callback of the timeout source created in ::muteChanged. 197 player->notifyPlayerOfMute(); 198 return FALSE; 185 199 } 186 200 … … 328 342 gst_element_set_state(m_playBin, GST_STATE_NULL); 329 343 gst_object_unref(GST_OBJECT(m_playBin)); 330 } 331 344 m_playBin = 0; 345 } 346 347 m_player = 0; 348 349 if (m_muteTimerHandler) 350 g_source_remove(m_muteTimerHandler); 351 m_muteTimerHandler = 0; 352 353 if (m_volumeTimerHandler) 354 g_source_remove(m_volumeTimerHandler); 355 m_volumeTimerHandler = 0; 332 356 } 333 357 … … 585 609 } 586 610 587 void MediaPlayerPrivateGStreamer::volumeChangedTimerFired(Timer<MediaPlayerPrivateGStreamer>*) 588 { 611 void MediaPlayerPrivateGStreamer::notifyPlayerOfVolumeChange() 612 { 613 m_volumeTimerHandler = 0; 614 615 if (!m_player || !m_playBin) 616 return; 589 617 double volume; 590 618 g_object_get(m_playBin, "volume", &volume, NULL); … … 594 622 void MediaPlayerPrivateGStreamer::volumeChanged() 595 623 { 596 Timer<MediaPlayerPrivateGStreamer> volumeChangedTimer(this, &MediaPlayerPrivateGStreamer::volumeChangedTimerFired); 597 volumeChangedTimer.startOneShot(0); 624 if (m_volumeTimerHandler) 625 g_source_remove(m_volumeTimerHandler); 626 m_volumeTimerHandler = g_timeout_add(0, reinterpret_cast<GSourceFunc>(mediaPlayerPrivateVolumeChangeTimeoutCallback), this); 598 627 } 599 628 … … 1159 1188 } 1160 1189 1161 void MediaPlayerPrivateGStreamer::muteChangedTimerFired(Timer<MediaPlayerPrivateGStreamer>*) 1162 { 1190 void MediaPlayerPrivateGStreamer::notifyPlayerOfMute() 1191 { 1192 m_muteTimerHandler = 0; 1193 1194 if (!m_player || !m_playBin) 1195 return; 1196 1163 1197 gboolean muted; 1164 1198 g_object_get(m_playBin, "mute", &muted, NULL); … … 1168 1202 void MediaPlayerPrivateGStreamer::muteChanged() 1169 1203 { 1170 Timer<MediaPlayerPrivateGStreamer> muteChangedTimer(this, &MediaPlayerPrivateGStreamer::muteChangedTimerFired); 1171 muteChangedTimer.startOneShot(0); 1204 if (m_muteTimerHandler) 1205 g_source_remove(m_muteTimerHandler); 1206 m_muteTimerHandler = g_timeout_add(0, reinterpret_cast<GSourceFunc>(mediaPlayerPrivateMuteChangeTimeoutCallback), this); 1172 1207 } 1173 1208 … … 1402 1437 gst_object_unref(bus); 1403 1438 1439 g_object_set(m_playBin, "mute", m_player->muted(), "volume", m_player->volume(), NULL); 1440 1404 1441 g_signal_connect(m_playBin, "notify::volume", G_CALLBACK(mediaPlayerPrivateVolumeChangedCallback), this); 1405 1442 g_signal_connect(m_playBin, "notify::source", G_CALLBACK(mediaPlayerPrivateSourceChangedCallback), this); -
trunk/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h
r68632 r73014 44 44 class IntRect; 45 45 class GStreamerGWorld; 46 class MediaPlayerPrivateGStreamer; 46 47 47 48 gboolean mediaPlayerPrivateMessageCallback(GstBus* bus, GstMessage* message, gpointer data); … … 49 50 void mediaPlayerPrivateMuteChangedCallback(GObject* element, GParamSpec* pspec, gpointer data); 50 51 void mediaPlayerPrivateSourceChangedCallback(GObject* element, GParamSpec* pspec, gpointer data); 52 gboolean mediaPlayerPrivateVolumeChangeTimeoutCallback(MediaPlayerPrivateGStreamer*); 53 gboolean mediaPlayerPrivateMuteChangeTimeoutCallback(MediaPlayerPrivateGStreamer*); 51 54 52 55 class MediaPlayerPrivateGStreamer : public MediaPlayerPrivateInterface { … … 82 85 void setVolume(float); 83 86 void volumeChanged(); 84 void volumeChangedTimerFired(Timer<MediaPlayerPrivateGStreamer>*);87 void notifyPlayerOfVolumeChange(); 85 88 86 89 bool supportsMuting() const; 87 90 void setMuted(bool); 88 91 void muteChanged(); 89 void muteChangedTimerFired(Timer<MediaPlayerPrivateGStreamer>*);92 void notifyPlayerOfMute(); 90 93 91 94 void setPreload(MediaPlayer::Preload); … … 177 180 bool m_mediaDurationKnown; 178 181 RefPtr<GStreamerGWorld> m_gstGWorld; 182 guint m_volumeTimerHandler; 183 guint m_muteTimerHandler; 179 184 }; 180 185 }
Note: See TracChangeset
for help on using the changeset viewer.