Changeset 54136 in webkit
- Timestamp:
- Feb 1, 2010 8:22:39 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r54134 r54136 1 2010-01-29 Philippe Normand <pnormand@igalia.com> 2 3 Reviewed by Eric Carlson. 4 5 [GTK] set playbin mute property depending on volume value 6 https://bugs.webkit.org/show_bug.cgi?id=31586 7 8 New API in MediaPlayer for mute control. 3 new methods are 9 introduced: 10 11 - bool supportsMuting() const; 12 - bool muted() const; 13 - void setMuted(bool); 14 15 Platform MediaPlayer implementations can support it easily if the 16 underlying sound daemon/API supports muting (eg. not only setting 17 volume to 0) like PulseAudio for instance on Linux. At the moment 18 the only player supporting this new API is the 19 MediaPlayerPrivateGStreamer. 20 21 * html/HTMLMediaElement.cpp: 22 (WebCore::HTMLMediaElement::setMuted): 23 (WebCore::HTMLMediaElement::mediaPlayerVolumeChanged): 24 (WebCore::HTMLMediaElement::mediaPlayerMuteChanged): 25 * html/HTMLMediaElement.h: 26 * platform/graphics/MediaPlayer.cpp: 27 (WebCore::NullMediaPlayerPrivate::supportsMuting): 28 (WebCore::NullMediaPlayerPrivate::setMuted): 29 (WebCore::MediaPlayer::MediaPlayer): 30 (WebCore::MediaPlayer::muted): 31 (WebCore::MediaPlayer::supportsMuting): 32 (WebCore::MediaPlayer::setMuted): 33 (WebCore::MediaPlayer::volumeChanged): 34 (WebCore::MediaPlayer::muteChanged): 35 * platform/graphics/MediaPlayer.h: 36 (WebCore::MediaPlayerClient::mediaPlayerMuteChanged): 37 * platform/graphics/MediaPlayerPrivate.h: 38 (WebCore::MediaPlayerPrivateInterface::supportsMuting): 39 (WebCore::MediaPlayerPrivateInterface::setMuted): 40 * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp: 41 (WebCore::mediaPlayerPrivateVolumeChangedCallback): 42 (WebCore::notifyVolumeIdleCallback): 43 (WebCore::mediaPlayerPrivateMuteChangedCallback): 44 (WebCore::notifyMuteIdleCallback): 45 (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): 46 (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate): 47 (WebCore::MediaPlayerPrivate::volumeChangedCallback): 48 (WebCore::MediaPlayerPrivate::volumeChanged): 49 (WebCore::MediaPlayerPrivate::supportsMuting): 50 (WebCore::MediaPlayerPrivate::setMuted): 51 (WebCore::MediaPlayerPrivate::muteChangedCallback): 52 (WebCore::MediaPlayerPrivate::muteChanged): 53 (WebCore::MediaPlayerPrivate::createGSTPlayBin): 54 * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h: 55 1 56 2010-02-01 Henry Haverinen <henry.haverinen@nokia.com> 2 57 -
trunk/WebCore/html/HTMLMediaElement.cpp
r53910 r54136 1236 1236 if (m_muted != muted) { 1237 1237 m_muted = muted; 1238 updateVolume(); 1238 // Avoid recursion when the player reports volume changes. 1239 if (!processingMediaPlayerCallback()) { 1240 if (m_player && m_player->supportsMuting()) { 1241 m_player->setMuted(m_muted); 1242 if (renderer()) 1243 renderer()->updateFromElement(); 1244 } else 1245 updateVolume(); 1246 } 1239 1247 scheduleEvent(eventNames().volumechangeEvent); 1240 1248 } … … 1445 1453 { 1446 1454 beginProcessingMediaPlayerCallback(); 1455 if (m_player) 1456 m_volume = m_player->volume(); 1447 1457 updateVolume(); 1458 endProcessingMediaPlayerCallback(); 1459 } 1460 1461 void HTMLMediaElement::mediaPlayerMuteChanged(MediaPlayer*) 1462 { 1463 beginProcessingMediaPlayerCallback(); 1464 if (m_player) 1465 setMuted(m_player->muted()); 1448 1466 endProcessingMediaPlayerCallback(); 1449 1467 } -
trunk/WebCore/html/HTMLMediaElement.h
r53629 r54136 197 197 virtual void mediaPlayerTimeChanged(MediaPlayer*); 198 198 virtual void mediaPlayerVolumeChanged(MediaPlayer*); 199 virtual void mediaPlayerMuteChanged(MediaPlayer*); 199 200 virtual void mediaPlayerDurationChanged(MediaPlayer*); 200 201 virtual void mediaPlayerRateChanged(MediaPlayer*); -
trunk/WebCore/platform/graphics/MediaPlayer.cpp
r53910 r54136 88 88 virtual void setVolume(float) { } 89 89 90 virtual bool supportsMuting() const { return false; } 91 virtual void setMuted(bool) { } 92 90 93 virtual bool hasClosedCaptions() const { return false; } 91 94 virtual void setClosedCaptionsVisible(bool) { }; … … 194 197 , m_rate(1.0f) 195 198 , m_volume(1.0f) 199 , m_muted(false) 196 200 , m_preservesPitch(true) 197 201 , m_autobuffer(false) … … 380 384 } 381 385 386 bool MediaPlayer::muted() const 387 { 388 return m_muted; 389 } 390 391 bool MediaPlayer::supportsMuting() const 392 { 393 return m_private->supportsMuting(); 394 } 395 396 void MediaPlayer::setMuted(bool muted) 397 { 398 m_muted = muted; 399 m_private->setMuted(muted); 400 } 401 382 402 bool MediaPlayer::hasClosedCaptions() const 383 403 { … … 543 563 } 544 564 545 void MediaPlayer::volumeChanged() 546 { 565 void MediaPlayer::volumeChanged(float newVolume) 566 { 567 m_volume = newVolume; 547 568 if (m_mediaPlayerClient) 548 569 m_mediaPlayerClient->mediaPlayerVolumeChanged(this); 549 570 } 550 571 572 void MediaPlayer::muteChanged(bool newMuted) 573 { 574 m_muted = newMuted; 575 if (m_mediaPlayerClient) 576 m_mediaPlayerClient->mediaPlayerMuteChanged(this); 577 } 578 551 579 void MediaPlayer::timeChanged() 552 580 { -
trunk/WebCore/platform/graphics/MediaPlayer.h
r53625 r54136 82 82 virtual void mediaPlayerReadyStateChanged(MediaPlayer*) { } 83 83 84 // the volume or mutedstate has changed84 // the volume state has changed 85 85 virtual void mediaPlayerVolumeChanged(MediaPlayer*) { } 86 87 // the mute state has changed 88 virtual void mediaPlayerMuteChanged(MediaPlayer*) { } 86 89 87 90 // time has jumped, eg. not as a result of normal playback … … 178 181 void setVolume(float); 179 182 183 bool supportsMuting() const; 184 bool muted() const; 185 void setMuted(bool); 186 180 187 bool hasClosedCaptions() const; 181 188 void setClosedCaptionsVisible(bool closedCaptionsVisible); … … 198 205 void networkStateChanged(); 199 206 void readyStateChanged(); 200 void volumeChanged(); 207 void volumeChanged(float); 208 void muteChanged(bool); 201 209 void timeChanged(); 202 210 void sizeChanged(); … … 240 248 float m_rate; 241 249 float m_volume; 250 bool m_muted; 242 251 bool m_preservesPitch; 243 252 bool m_autobuffer; -
trunk/WebCore/platform/graphics/MediaPlayerPrivate.h
r53625 r54136 75 75 virtual void setVolume(float) = 0; 76 76 77 virtual bool supportsMuting() const { return false; } 78 virtual void setMuted(bool) { } 79 77 80 virtual bool hasClosedCaptions() const { return false; } 78 81 virtual void setClosedCaptionsVisible(bool) { } -
trunk/WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp
r54061 r54136 182 182 void mediaPlayerPrivateVolumeChangedCallback(GObject *element, GParamSpec *pspec, gpointer data) 183 183 { 184 // This is called when playbin receives the notify::volume signal. 184 185 MediaPlayerPrivate* mp = reinterpret_cast<MediaPlayerPrivate*>(data); 185 186 mp->volumeChanged(); 186 187 } 187 188 188 gboolean notifyVolumeIdleCallback(MediaPlayer* mp) 189 { 190 mp->volumeChanged(); 189 gboolean notifyVolumeIdleCallback(gpointer data) 190 { 191 MediaPlayerPrivate* mp = reinterpret_cast<MediaPlayerPrivate*>(data); 192 mp->volumeChangedCallback(); 193 return FALSE; 194 } 195 196 void mediaPlayerPrivateMuteChangedCallback(GObject *element, GParamSpec *pspec, gpointer data) 197 { 198 // This is called when playbin receives the notify::mute signal. 199 MediaPlayerPrivate* mp = reinterpret_cast<MediaPlayerPrivate*>(data); 200 mp->muteChanged(); 201 } 202 203 gboolean notifyMuteIdleCallback(gpointer data) 204 { 205 MediaPlayerPrivate* mp = reinterpret_cast<MediaPlayerPrivate*>(data); 206 mp->muteChangedCallback(); 191 207 return FALSE; 192 208 } … … 292 308 , m_playbackRate(1) 293 309 , m_errorOccured(false) 294 , m_volumeIdleId( -1)310 , m_volumeIdleId(0) 295 311 , m_mediaDuration(0.0) 312 , m_muteIdleId(0) 296 313 { 297 314 doGstInit(); … … 302 319 if (m_volumeIdleId) { 303 320 g_source_remove(m_volumeIdleId); 304 m_volumeIdleId = -1; 321 m_volumeIdleId = 0; 322 } 323 324 if (m_muteIdleId) { 325 g_source_remove(m_muteIdleId); 326 m_muteIdleId = 0; 305 327 } 306 328 … … 533 555 } 534 556 557 void MediaPlayerPrivate::volumeChangedCallback() 558 { 559 double volume; 560 g_object_get(m_playBin, "volume", &volume, NULL); 561 m_player->volumeChanged(static_cast<float>(volume)); 562 } 563 535 564 void MediaPlayerPrivate::volumeChanged() 536 565 { 537 if (m_volumeIdleId) {566 if (m_volumeIdleId) 538 567 g_source_remove(m_volumeIdleId); 539 m_volumeIdleId = -1; 540 } 541 m_volumeIdleId = g_idle_add((GSourceFunc) notifyVolumeIdleCallback, m_player); 542 } 543 568 m_volumeIdleId = g_idle_add((GSourceFunc) notifyVolumeIdleCallback, this); 569 } 544 570 545 571 void MediaPlayerPrivate::setRate(float rate) … … 921 947 922 948 m_player->durationChanged(); 949 } 950 951 bool MediaPlayerPrivate::supportsMuting() const 952 { 953 return true; 954 } 955 956 void MediaPlayerPrivate::setMuted(bool muted) 957 { 958 if (!m_playBin) 959 return; 960 961 g_object_set(m_playBin, "mute", muted, NULL); 962 } 963 964 void MediaPlayerPrivate::muteChangedCallback() 965 { 966 gboolean muted; 967 g_object_get(m_playBin, "mute", &muted, NULL); 968 m_player->muteChanged(static_cast<bool>(muted)); 969 } 970 971 void MediaPlayerPrivate::muteChanged() 972 { 973 if (m_muteIdleId) 974 g_source_remove(m_muteIdleId); 975 976 m_muteIdleId = g_idle_add((GSourceFunc) notifyMuteIdleCallback, this); 923 977 } 924 978 … … 1141 1195 g_signal_connect(m_playBin, "notify::volume", G_CALLBACK(mediaPlayerPrivateVolumeChangedCallback), this); 1142 1196 g_signal_connect(m_playBin, "notify::source", G_CALLBACK(mediaPlayerPrivateSourceChangedCallback), this); 1197 g_signal_connect(m_playBin, "notify::mute", G_CALLBACK(mediaPlayerPrivateMuteChangedCallback), this); 1143 1198 1144 1199 m_videoSink = webkit_video_sink_new(); -
trunk/WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.h
r53909 r54136 77 77 78 78 void setRate(float); 79 79 80 void setVolume(float); 80 81 void volumeChanged(); 82 void volumeChangedCallback(); 83 84 bool supportsMuting() const; 85 void setMuted(bool); 86 void muteChanged(); 87 void muteChangedCallback(); 81 88 82 89 MediaPlayer::NetworkState networkState() const; … … 150 157 guint m_volumeIdleId; 151 158 gfloat m_mediaDuration; 159 guint m_muteIdleId; 152 160 }; 153 161 } -
trunk/WebKit/chromium/ChangeLog
r54119 r54136 1 2010-01-29 Philippe Normand <pnormand@igalia.com> 2 3 Reviewed by Eric Carlson. 4 5 [GTK] set playbin mute property depending on volume value 6 https://bugs.webkit.org/show_bug.cgi?id=31586 7 8 New API in MediaPlayer for mute control 9 10 * public/WebMediaPlayerClient.h: 11 * src/WebMediaPlayerClientImpl.cpp: 12 (WebKit::WebMediaPlayerClientImpl::volumeChanged): 13 (WebKit::WebMediaPlayerClientImpl::muteChanged): 14 * src/WebMediaPlayerClientImpl.h: 15 1 16 2010-01-31 Kent Tamura <tkent@chromium.org> 2 17 -
trunk/WebKit/chromium/public/WebMediaPlayerClient.h
r50690 r54136 41 41 virtual void networkStateChanged() = 0; 42 42 virtual void readyStateChanged() = 0; 43 virtual void volumeChanged() = 0; 43 virtual void volumeChanged(float) = 0; 44 virtual void muteChanged(bool) = 0; 44 45 virtual void timeChanged() = 0; 45 46 virtual void repaint() = 0; -
trunk/WebKit/chromium/src/WebMediaPlayerClientImpl.cpp
r50721 r54136 86 86 } 87 87 88 void WebMediaPlayerClientImpl::volumeChanged() 89 { 90 ASSERT(m_mediaPlayer); 91 m_mediaPlayer->volumeChanged(); 88 void WebMediaPlayerClientImpl::volumeChanged(float newVolume) 89 { 90 ASSERT(m_mediaPlayer); 91 m_mediaPlayer->volumeChanged(newVolume); 92 } 93 94 void WebMediaPlayerClientImpl::muteChanged(bool newMute) 95 { 96 ASSERT(m_mediaPlayer); 97 m_mediaPlayer->muteChanged(newMute); 92 98 } 93 99 -
trunk/WebKit/chromium/src/WebMediaPlayerClientImpl.h
r50721 r54136 54 54 virtual void networkStateChanged(); 55 55 virtual void readyStateChanged(); 56 virtual void volumeChanged(); 56 virtual void volumeChanged(float); 57 virtual void muteChanged(bool); 57 58 virtual void timeChanged(); 58 59 virtual void repaint();
Note: See TracChangeset
for help on using the changeset viewer.