Changeset 168996 in webkit


Ignore:
Timestamp:
May 17, 2014 2:36:15 PM (10 years ago)
Author:
commit-queue@webkit.org
Message:

Setting playback rate on video with media controller is not ignored.
https://bugs.webkit.org/show_bug.cgi?id=129048

Patch by Piotr Grad <p.grad@samsung.com> on 2014-05-17
Reviewed by Jer Noble.

Source/WebCore:
Replaced queries for m_playbackRate with effectivePlaybackRate()
which includes media controller playback rate.

Test: media/video-controller-child-rate.html

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::parseAttribute):

  • html/HTMLMediaElement.h:

LayoutTests:

  • media/video-controller-child-rate-expected.txt: Added.
  • media/video-controller-child-rate.html: Added.
Location:
trunk
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r168987 r168996  
     12014-05-17  Piotr Grad  <p.grad@samsung.com>
     2
     3        Setting playback rate on video with media controller is not ignored.
     4        https://bugs.webkit.org/show_bug.cgi?id=129048
     5
     6        Reviewed by Jer Noble.
     7
     8        * media/video-controller-child-rate-expected.txt: Added.
     9        * media/video-controller-child-rate.html: Added.
     10
    1112014-05-16  Simon Fraser  <simon.fraser@apple.com>
    212
  • trunk/Source/WebCore/ChangeLog

    r168994 r168996  
     12014-05-17  Piotr Grad  <p.grad@samsung.com>
     2
     3        Setting playback rate on video with media controller is not ignored.
     4        https://bugs.webkit.org/show_bug.cgi?id=129048
     5
     6        Reviewed by Jer Noble.
     7
     8        Replaced queries for m_playbackRate with effectivePlaybackRate()
     9        which includes media controller playback rate.
     10
     11        Test: media/video-controller-child-rate.html
     12
     13        * html/HTMLMediaElement.cpp:
     14        (WebCore::HTMLMediaElement::parseAttribute):
     15        * html/HTMLMediaElement.h:
     16
    1172014-05-16  Anders Carlsson  <andersca@apple.com>
    218
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r168755 r168996  
    25362536        // Not too soon, use the cached time only if it hasn't expired.
    25372537        if (clockDelta < maximumDurationToCacheMediaTime) {
    2538             double adjustedCacheTime = m_cachedTime + (m_playbackRate * clockDelta);
     2538            double adjustedCacheTime = m_cachedTime + (effectivePlaybackRate() * clockDelta);
    25392539
    25402540#if LOG_CACHED_TIME_WARNINGS
     
    25502550    if (maximumDurationToCacheMediaTime && now > m_minimumClockTimeToUpdateCachedTime && m_cachedTime != MediaPlayer::invalidTime()) {
    25512551        double clockDelta = now - m_clockTimeAtLastCachedTimeUpdate;
    2552         double delta = m_cachedTime + (m_playbackRate * clockDelta) - m_player->currentTime();
     2552        double delta = m_cachedTime + (effectivePlaybackRate() * clockDelta) - m_player->currentTime();
    25532553        LOG(Media, "HTMLMediaElement::currentTime - cached time was %f seconds off of media time when it expired", delta);
    25542554    }
     
    26162616}
    26172617
     2618double HTMLMediaElement::effectivePlaybackRate() const
     2619{
     2620    return m_mediaController ? m_mediaController->playbackRate() : m_playbackRate;
     2621}
     2622
    26182623double HTMLMediaElement::playbackRate() const
    26192624{
     
    26372642void HTMLMediaElement::updatePlaybackRate()
    26382643{
    2639     double effectiveRate = m_mediaController ? m_mediaController->playbackRate() : m_playbackRate;
     2644    double effectiveRate = effectivePlaybackRate();
    26402645    if (m_player && potentiallyPlaying() && m_player->rate() != effectiveRate)
    26412646        m_player->setRate(effectiveRate);
     
    26642669    // The ended attribute must return true if the media element has ended
    26652670    // playback and the direction of playback is forwards, and false otherwise.
    2666     return endedPlayback() && m_playbackRate > 0;
     2671    return endedPlayback() && effectivePlaybackRate() > 0;
    26672672}
    26682673
     
    31013106    ASSERT(m_player);
    31023107
    3103     if (m_fragmentEndTime != MediaPlayer::invalidTime() && currentTime() >= m_fragmentEndTime && m_playbackRate > 0) {
     3108    if (m_fragmentEndTime != MediaPlayer::invalidTime() && currentTime() >= m_fragmentEndTime && effectivePlaybackRate() > 0) {
    31043109        m_fragmentEndTime = MediaPlayer::invalidTime();
    31053110        if (!m_mediaController && !m_paused) {
     
    31113116    scheduleTimeupdateEvent(true);
    31123117
    3113     if (!m_playbackRate)
     3118    if (!effectivePlaybackRate())
    31143119        return;
    31153120
     
    40334038    double now = currentTime();
    40344039    double dur = duration();
     4040    double playbackRate = effectivePlaybackRate();
    40354041   
    40364042    // When the current playback position reaches the end of the media resource then the user agent must follow these steps:
    40374043    if (!std::isnan(dur) && dur) {
    40384044        // If the media element has a loop attribute specified and does not have a current media controller,
    4039         if (loop() && !m_mediaController && m_playbackRate > 0) {
     4045        if (loop() && !m_mediaController && playbackRate > 0) {
    40404046            m_sentEndEvent = false;
    40414047            // then seek to the earliest possible position of the media resource and abort these steps when the direction of
     
    40434049            if (now >= dur)
    40444050                seek(0);
    4045         } else if ((now <= 0 && m_playbackRate < 0) || (now >= dur && m_playbackRate > 0)) {
     4051        } else if ((now <= 0 && playbackRate < 0) || (now >= dur && playbackRate > 0)) {
    40464052            // If the media element does not have a current media controller, and the media element
    40474053            // has still ended playback and paused is false,
     
    43534359    // or the media element has a current media controller.
    43544360    double now = currentTime();
    4355     if (m_playbackRate > 0)
     4361    if (effectivePlaybackRate() > 0)
    43564362        return dur > 0 && now >= dur && (!loop() || m_mediaController);
    43574363
    43584364    // or the current playback position is the earliest possible position and the direction
    43594365    // of playback is backwards
    4360     if (m_playbackRate < 0)
     4366    if (effectivePlaybackRate() < 0)
    43614367        return now <= 0;
    43624368
     
    44614467            // Set rate, muted before calling play in case they were set before the media engine was setup.
    44624468            // The media engine should just stash the rate and muted values since it isn't already playing.
    4463             m_player->setRate(m_playbackRate);
     4469            m_player->setRate(effectivePlaybackRate());
    44644470            m_player->setMuted(muted());
    44654471
  • trunk/Source/WebCore/html/HTMLMediaElement.h

    r168512 r168996  
    501501    void setNetworkState(MediaPlayer::NetworkState);
    502502
     503    double effectivePlaybackRate() const;
     504
    503505    virtual Document* mediaPlayerOwningDocument() override;
    504506    virtual void mediaPlayerNetworkStateChanged(MediaPlayer*) override;
Note: See TracChangeset for help on using the changeset viewer.