Changeset 56010 in webkit


Ignore:
Timestamp:
Mar 15, 2010 1:18:47 PM (14 years ago)
Author:
Philippe Normand
Message:

2010-03-15 Philippe Normand <pnormand@igalia.com>

Reviewed by Gustavo Noronha Silva.

[GStreamer] duration query optimizations
https://bugs.webkit.org/show_bug.cgi?id=36116

Don't reattempt duration queries that previously failed and cache
media duration only if it's known.

  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): (WebCore::MediaPlayerPrivate::duration): (WebCore::MediaPlayerPrivate::updateStates): (WebCore::MediaPlayerPrivate::durationChanged):
  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
Location:
trunk/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r56009 r56010  
     12010-03-15  Philippe Normand  <pnormand@igalia.com>
     2
     3        Reviewed by Gustavo Noronha Silva.
     4
     5        [GStreamer] duration query optimizations
     6        https://bugs.webkit.org/show_bug.cgi?id=36116
     7
     8        Don't reattempt duration queries that previously failed and cache
     9        media duration only if it's known.
     10
     11        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
     12        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
     13        (WebCore::MediaPlayerPrivate::duration):
     14        (WebCore::MediaPlayerPrivate::updateStates):
     15        (WebCore::MediaPlayerPrivate::durationChanged):
     16        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
     17
    1182010-03-11  Peter Kasting  <pkasting@google.com>
    219
  • trunk/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp

    r56009 r56010  
    299299    , m_preload(MediaPlayer::Auto)
    300300    , m_delayingLoad(false)
     301    , m_mediaDurationKnown(true)
    301302{
    302303    if (doGstInit())
     
    417418    if (m_errorOccured)
    418419        return 0.0;
     420
     421    // Media duration query failed already, don't attempt new useless queries.
     422    if (!m_mediaDurationKnown)
     423        return numeric_limits<float>::infinity();
    419424
    420425    if (m_mediaDuration)
     
    876881            if (!m_mediaDuration) {
    877882                float newDuration = duration();
    878                 if (!isinf(newDuration))
     883                m_mediaDurationKnown = !isinf(newDuration);
     884                if (m_mediaDurationKnown)
    879885                    m_mediaDuration = newDuration;
    880886            }
     
    11141120
    11151121    // And re-cache it if possible.
     1122    GstState state;
     1123    gst_element_get_state(m_playBin, &state, 0, 0);
    11161124    float newDuration = duration();
     1125
     1126    if (state <= GST_STATE_READY) {
     1127        // Don't set m_mediaDurationKnown yet if the pipeline is not
     1128        // paused. This allows duration() query to fail at least once
     1129        // before playback starts and duration becomes known.
     1130        if (!isinf(newDuration))
     1131            m_mediaDuration = newDuration;
     1132    } else {
     1133        m_mediaDurationKnown = !isinf(newDuration);
     1134        if (m_mediaDurationKnown)
     1135            m_mediaDuration = newDuration;
     1136    }
     1137
    11171138    if (!isinf(newDuration))
    11181139        m_mediaDuration = newDuration;
  • trunk/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h

    r56009 r56010  
    171171            MediaPlayer::Preload m_preload;
    172172            bool m_delayingLoad;
     173            bool m_mediaDurationKnown;
    173174    };
    174175}
Note: See TracChangeset for help on using the changeset viewer.