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

Unified Diff: third_party/WebKit/WebCore/html/HTMLMediaElement.cpp

Issue 39293: WebKit merge 41447:41498 [third_party/WebKit] (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: remove CRLF Created 11 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/WebCore/html/HTMLMediaElement.cpp
===================================================================
--- third_party/WebKit/WebCore/html/HTMLMediaElement.cpp (revision 11154)
+++ third_party/WebKit/WebCore/html/HTMLMediaElement.cpp (working copy)
@@ -76,7 +76,6 @@
, m_begun(false)
, m_loadedFirstFrame(false)
, m_autoplaying(true)
- , m_currentLoop(0)
, m_volume(1.0f)
, m_muted(false)
, m_paused(true)
@@ -85,7 +84,6 @@
, m_previousProgress(0)
, m_previousProgressTime(numeric_limits<double>::max())
, m_sentStalledEvent(false)
- , m_bufferingRate(0)
, m_loadNestingLevel(0)
, m_terminateLoadBelowNestingLevel(0)
, m_pausedInternal(false)
@@ -299,14 +297,6 @@
return m_networkState;
}
-float HTMLMediaElement::bufferingRate()
-{
- if (!m_player)
- return 0;
- return m_bufferingRate;
- //return m_player->dataRate();
-}
-
String HTMLMediaElement::canPlayType(const String& mimeType) const
{
MediaPlayer::SupportsType support = MediaPlayer::supportsType(ContentType(mimeType));
@@ -352,7 +342,6 @@
m_progressEventTimer.stop();
m_sentStalledEvent = false;
- m_bufferingRate = 0;
m_loadTimer.stop();
@@ -384,7 +373,6 @@
m_player->pause();
m_player->seek(0);
}
- m_currentLoop = 0;
dispatchEventForType(eventNames().emptiedEvent, false, true);
if (m_loadNestingLevel < m_terminateLoadBelowNestingLevel)
goto end;
@@ -471,7 +459,6 @@
m_error = MediaError::create(MediaError::MEDIA_ERR_NETWORK);
m_begun = false;
m_progressEventTimer.stop();
- m_bufferingRate = 0;
initAndDispatchProgressEvent(eventNames().errorEvent);
if (m_loadNestingLevel < m_terminateLoadBelowNestingLevel)
@@ -490,7 +477,6 @@
m_networkState = LOADING;
if (state >= MediaPlayer::LoadedMetaData && m_networkState < LOADED_METADATA) {
- m_player->seek(effectiveStart());
m_networkState = LOADED_METADATA;
dispatchEventForType(eventNames().durationchangeEvent, false, true);
@@ -535,7 +521,6 @@
m_begun = false;
m_networkState = LOADED;
m_progressEventTimer.stop();
- m_bufferingRate = 0;
initAndDispatchProgressEvent(eventNames().loadEvent);
}
}
@@ -596,12 +581,9 @@
unsigned progress = m_player->bytesLoaded();
double time = WTF::currentTime();
double timedelta = time - m_previousProgressTime;
- if (timedelta)
- m_bufferingRate = (float)(0.8 * m_bufferingRate + 0.2 * ((float)(progress - m_previousProgress)) / timedelta);
if (progress == m_previousProgress) {
if (timedelta > 3.0 && !m_sentStalledEvent) {
- m_bufferingRate = 0;
initAndDispatchProgressEvent(eventNames().stalledEvent);
m_sentStalledEvent = true;
}
@@ -621,23 +603,10 @@
ec = INVALID_STATE_ERR;
return;
}
+
+ time = min(time, duration());
+ time = max(time, 0.0f);
- // 2
- float minTime;
- if (currentLoop() == 0)
- minTime = effectiveStart();
- else
- minTime = effectiveLoopStart();
-
- // 3
- float maxTime = currentLoop() == playCount() - 1 ? effectiveEnd() : effectiveLoopEnd();
-
- // 4
- time = min(time, maxTime);
-
- // 5
- time = max(time, minTime);
-
// 6
RefPtr<TimeRanges> seekableRanges = seekable();
if (!seekableRanges->contain(time)) {
@@ -657,10 +626,8 @@
// 10
// As soon as the user agent has established whether or not the media data for the new playback position is available,
// and, if it is, decoded enough data to play back that position, the seeking DOM attribute must be set to false.
- if (m_player) {
- m_player->setEndTime(maxTime);
+ if (m_player)
m_player->seek(time);
- }
}
HTMLMediaElement::ReadyState HTMLMediaElement::readyState() const
@@ -768,8 +735,7 @@
}
ExceptionCode unused;
if (endedPlayback()) {
- m_currentLoop = 0;
- seek(effectiveStart(), unused);
+ seek(0, unused);
}
setPlaybackRate(defaultPlaybackRate(), unused);
@@ -815,77 +781,16 @@
updatePlayState();
}
-unsigned HTMLMediaElement::playCount() const
+bool HTMLMediaElement::loop() const
{
- bool ok;
- unsigned count = getAttribute(playcountAttr).string().toUInt(&ok);
- return (count > 0 && ok) ? count : 1;
+ return hasAttribute(loopAttr);
}
-void HTMLMediaElement::setPlayCount(unsigned count, ExceptionCode& ec)
+void HTMLMediaElement::setLoop(bool b)
{
- if (!count) {
- ec = INDEX_SIZE_ERR;
- return;
- }
- setAttribute(playcountAttr, String::number(count));
- checkIfSeekNeeded();
+ setBooleanAttribute(loopAttr, b);
}
-float HTMLMediaElement::start() const
-{
- return getTimeOffsetAttribute(startAttr, 0);
-}
-
-void HTMLMediaElement::setStart(float time)
-{
- setTimeOffsetAttribute(startAttr, time);
- checkIfSeekNeeded();
-}
-
-float HTMLMediaElement::end() const
-{
- return getTimeOffsetAttribute(endAttr, std::numeric_limits<float>::infinity());
-}
-
-void HTMLMediaElement::setEnd(float time)
-{
- setTimeOffsetAttribute(endAttr, time);
- checkIfSeekNeeded();
-}
-
-float HTMLMediaElement::loopStart() const
-{
- return getTimeOffsetAttribute(loopstartAttr, start());
-}
-
-void HTMLMediaElement::setLoopStart(float time)
-{
- setTimeOffsetAttribute(loopstartAttr, time);
- checkIfSeekNeeded();
-}
-
-float HTMLMediaElement::loopEnd() const
-{
- return getTimeOffsetAttribute(loopendAttr, end());
-}
-
-void HTMLMediaElement::setLoopEnd(float time)
-{
- setTimeOffsetAttribute(loopendAttr, time);
- checkIfSeekNeeded();
-}
-
-unsigned HTMLMediaElement::currentLoop() const
-{
- return m_currentLoop;
-}
-
-void HTMLMediaElement::setCurrentLoop(unsigned currentLoop)
-{
- m_currentLoop = currentLoop;
-}
-
bool HTMLMediaElement::controls() const
{
Frame* frame = document()->frame();
@@ -1008,40 +913,6 @@
return mediaSrc;
}
-void HTMLMediaElement::checkIfSeekNeeded()
-{
- // 3.14.9.5. Offsets into the media resource
- // 1
- if (playCount() <= m_currentLoop)
- m_currentLoop = playCount() - 1;
-
- // 2
- if (networkState() <= LOADING)
- return;
-
- // 3
- ExceptionCode ec;
- float time = currentTime();
- if (!m_currentLoop && time < effectiveStart())
- seek(effectiveStart(), ec);
-
- // 4
- if (m_currentLoop && time < effectiveLoopStart())
- seek(effectiveLoopStart(), ec);
-
- // 5
- if (m_currentLoop < playCount() - 1 && time > effectiveLoopEnd()) {
- seek(effectiveLoopStart(), ec);
- m_currentLoop++;
- }
-
- // 6
- if (m_currentLoop == playCount() - 1 && time > effectiveEnd())
- seek(effectiveEnd(), ec);
-
- updatePlayState();
-}
-
void HTMLMediaElement::mediaPlayerTimeChanged(MediaPlayer*)
{
beginProcessingMediaPlayerCallback();
@@ -1050,17 +921,16 @@
m_seeking = false;
float now = currentTime();
- if (m_currentLoop < playCount() - 1 && now >= effectiveLoopEnd()) {
- ExceptionCode ec;
- seek(effectiveLoopStart(), ec);
- m_currentLoop++;
- dispatchEventForType(eventNames().timeupdateEvent, false, true);
+ if (now >= duration()) {
+ if (loop()) {
+ ExceptionCode ec;
+ seek(0, ec);
+ dispatchEventForType(eventNames().timeupdateEvent, false, true);
+ } else {
+ dispatchEventForType(eventNames().timeupdateEvent, false, true);
+ dispatchEventForType(eventNames().endedEvent, false, true);
+ }
}
-
- if (m_currentLoop == playCount() - 1 && now >= effectiveEnd()) {
- dispatchEventForType(eventNames().timeupdateEvent, false, true);
- dispatchEventForType(eventNames().endedEvent, false, true);
- }
updatePlayState();
@@ -1104,34 +974,6 @@
return TimeRanges::create(0, m_player->maxTimeSeekable());
}
-float HTMLMediaElement::effectiveStart() const
-{
- if (!m_player)
- return 0;
- return min(start(), m_player->duration());
-}
-
-float HTMLMediaElement::effectiveEnd() const
-{
- if (!m_player)
- return 0;
- return min(max(end(), max(start(), loopStart())), m_player->duration());
-}
-
-float HTMLMediaElement::effectiveLoopStart() const
-{
- if (!m_player)
- return 0;
- return min(loopStart(), m_player->duration());
-}
-
-float HTMLMediaElement::effectiveLoopEnd() const
-{
- if (!m_player)
- return 0;
- return min(max(start(), max(loopStart(), loopEnd())), m_player->duration());
-}
-
bool HTMLMediaElement::activelyPlaying() const
{
return !paused() && readyState() >= CAN_PLAY && !endedPlayback(); // && !stoppedDueToErrors() && !pausedForUserInteraction();
@@ -1139,7 +981,7 @@
bool HTMLMediaElement::endedPlayback() const
{
- return networkState() >= LOADED_METADATA && currentTime() >= effectiveEnd() && currentLoop() == playCount() - 1;
+ return networkState() >= LOADED_METADATA && currentTime() >= duration() && !loop();
}
void HTMLMediaElement::updateVolume()
@@ -1170,9 +1012,7 @@
return;
}
- m_player->setEndTime(currentLoop() == playCount() - 1 ? effectiveEnd() : effectiveLoopEnd());
-
- bool shouldBePlaying = activelyPlaying() && currentTime() < effectiveEnd();
+ bool shouldBePlaying = activelyPlaying();
if (shouldBePlaying && m_player->paused())
m_player->play();
else if (!shouldBePlaying && !m_player->paused())
« no previous file with comments | « third_party/WebKit/WebCore/html/HTMLMediaElement.h ('k') | third_party/WebKit/WebCore/html/HTMLMediaElement.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698