Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1019)

Side by Side Diff: Source/core/html/HTMLMediaElement.cpp

Issue 336303002: Fix HTMLMediaElement to always use the 'effective playback rate' (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Test Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved. 2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 2097 matching lines...) Expand 10 before | Expand all | Expand 10 after
2108 void HTMLMediaElement::setPlaybackRate(double rate) 2108 void HTMLMediaElement::setPlaybackRate(double rate)
2109 { 2109 {
2110 WTF_LOG(Media, "HTMLMediaElement::setPlaybackRate(%f)", rate); 2110 WTF_LOG(Media, "HTMLMediaElement::setPlaybackRate(%f)", rate);
2111 2111
2112 if (m_playbackRate != rate) { 2112 if (m_playbackRate != rate) {
2113 m_playbackRate = rate; 2113 m_playbackRate = rate;
2114 invalidateCachedTime(); 2114 invalidateCachedTime();
2115 scheduleEvent(EventTypeNames::ratechange); 2115 scheduleEvent(EventTypeNames::ratechange);
2116 } 2116 }
2117 2117
2118 if (m_player && potentiallyPlaying() && m_player->rate() != rate && !m_media Controller) 2118 updatePlaybackRate();
2119 m_player->setRate(rate); 2119 }
2120
2121 double HTMLMediaElement::effectivePlaybackRate() const
2122 {
2123 return m_mediaController ? m_mediaController->playbackRate() : m_playbackRat e;
2120 } 2124 }
2121 2125
2122 HTMLMediaElement::DirectionOfPlayback HTMLMediaElement::directionOfPlayback() co nst 2126 HTMLMediaElement::DirectionOfPlayback HTMLMediaElement::directionOfPlayback() co nst
2123 { 2127 {
2124 return m_playbackRate >= 0 ? Forward : Backward; 2128 return m_playbackRate >= 0 ? Forward : Backward;
2125 } 2129 }
2126 2130
2127 void HTMLMediaElement::updatePlaybackRate() 2131 void HTMLMediaElement::updatePlaybackRate()
2128 { 2132 {
2129 double effectiveRate = m_mediaController ? m_mediaController->playbackRate() : m_playbackRate; 2133 double effectiveRate = effectivePlaybackRate();
2130 if (m_player && potentiallyPlaying() && m_player->rate() != effectiveRate) 2134 if (m_player && potentiallyPlaying() && m_player->rate() != effectiveRate)
2131 m_player->setRate(effectiveRate); 2135 m_player->setRate(effectiveRate);
2132 } 2136 }
2133 2137
2134 bool HTMLMediaElement::ended() const 2138 bool HTMLMediaElement::ended() const
2135 { 2139 {
2136 // 4.8.10.8 Playing the media resource 2140 // 4.8.10.8 Playing the media resource
2137 // The ended attribute must return true if the media element has ended 2141 // The ended attribute must return true if the media element has ended
2138 // playback and the direction of playback is forwards, and false otherwise. 2142 // playback and the direction of playback is forwards, and false otherwise.
2139 return endedPlayback() && directionOfPlayback() == Forward; 2143 return endedPlayback() && directionOfPlayback() == Forward;
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
2332 if (!m_mediaController && !m_paused) { 2336 if (!m_mediaController && !m_paused) {
2333 UseCounter::count(document(), UseCounter::HTMLMediaElementPauseAtFra gmentEnd); 2337 UseCounter::count(document(), UseCounter::HTMLMediaElementPauseAtFra gmentEnd);
2334 // changes paused to true and fires a simple event named pause at th e media element. 2338 // changes paused to true and fires a simple event named pause at th e media element.
2335 pause(); 2339 pause();
2336 } 2340 }
2337 } 2341 }
2338 2342
2339 if (!m_seeking) 2343 if (!m_seeking)
2340 scheduleTimeupdateEvent(true); 2344 scheduleTimeupdateEvent(true);
2341 2345
2342 if (!m_playbackRate) 2346 if (!effectivePlaybackRate())
2343 return; 2347 return;
2344 2348
2345 if (!m_paused && hasMediaControls()) 2349 if (!m_paused && hasMediaControls())
2346 mediaControls()->playbackProgressed(); 2350 mediaControls()->playbackProgressed();
2347 2351
2348 updateActiveTextTrackCues(currentTime()); 2352 updateActiveTextTrackCues(currentTime());
2349 } 2353 }
2350 2354
2351 void HTMLMediaElement::scheduleTimeupdateEvent(bool periodicEvent) 2355 void HTMLMediaElement::scheduleTimeupdateEvent(bool periodicEvent)
2352 { 2356 {
(...skipping 914 matching lines...) Expand 10 before | Expand all | Expand 10 after
3267 WTF_LOG(Media, "HTMLMediaElement::updatePlayState - shouldBePlaying = %s, pl ayerPaused = %s", 3271 WTF_LOG(Media, "HTMLMediaElement::updatePlayState - shouldBePlaying = %s, pl ayerPaused = %s",
3268 boolString(shouldBePlaying), boolString(playerPaused)); 3272 boolString(shouldBePlaying), boolString(playerPaused));
3269 3273
3270 if (shouldBePlaying) { 3274 if (shouldBePlaying) {
3271 setDisplayMode(Video); 3275 setDisplayMode(Video);
3272 invalidateCachedTime(); 3276 invalidateCachedTime();
3273 3277
3274 if (playerPaused) { 3278 if (playerPaused) {
3275 // Set rate, muted before calling play in case they were set before the media engine was setup. 3279 // Set rate, muted before calling play in case they were set before the media engine was setup.
3276 // The media engine should just stash the rate and muted values sinc e it isn't already playing. 3280 // The media engine should just stash the rate and muted values sinc e it isn't already playing.
3277 m_player->setRate(m_playbackRate); 3281 m_player->setRate(effectivePlaybackRate());
3278 updateVolume(); 3282 updateVolume();
3279 3283
3280 m_player->play(); 3284 m_player->play();
3281 } 3285 }
3282 3286
3283 if (hasMediaControls()) 3287 if (hasMediaControls())
3284 mediaControls()->playbackStarted(); 3288 mediaControls()->playbackStarted();
3285 startPlaybackProgressTimer(); 3289 startPlaybackProgressTimer();
3286 m_playing = true; 3290 m_playing = true;
3287 3291
(...skipping 661 matching lines...) Expand 10 before | Expand all | Expand 10 after
3949 3953
3950 #if ENABLE(WEB_AUDIO) 3954 #if ENABLE(WEB_AUDIO)
3951 void HTMLMediaElement::clearWeakMembers(Visitor* visitor) 3955 void HTMLMediaElement::clearWeakMembers(Visitor* visitor)
3952 { 3956 {
3953 if (!visitor->isAlive(m_audioSourceNode) && audioSourceProvider()) 3957 if (!visitor->isAlive(m_audioSourceNode) && audioSourceProvider())
3954 audioSourceProvider()->setClient(0); 3958 audioSourceProvider()->setClient(0);
3955 } 3959 }
3956 #endif 3960 #endif
3957 3961
3958 } 3962 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698