Changeset 169200 in webkit


Ignore:
Timestamp:
May 22, 2014 7:57:59 AM (10 years ago)
Author:
commit-queue@webkit.org
Message:

Video is resumed with old playback rate.
https://bugs.webkit.org/show_bug.cgi?id=132905

Patch by Piotr Grad <p.grad@samsung.com> on 2014-05-22
Reviewed by Philippe Normand.

Source/WebCore:
Setting '0' playback rate is causing pipeline to pause.
GStreamer player impl. exposed this information to upper layers but it should not.
Solution is to hidden such situation behind m_playbackRatePause flag.

Test: media/video-paused-0-rate.html

  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:

(WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
(WebCore::MediaPlayerPrivateGStreamer::play):
(WebCore::MediaPlayerPrivateGStreamer::pause):
(WebCore::MediaPlayerPrivateGStreamer::doSeek):
(WebCore::MediaPlayerPrivateGStreamer::updatePlaybackRate):
(WebCore::MediaPlayerPrivateGStreamer::paused):
(WebCore::MediaPlayerPrivateGStreamer::setRate):
(WebCore::MediaPlayerPrivateGStreamer::updateStates):

  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

LayoutTests:

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

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r169199 r169200  
     12014-05-22  Piotr Grad  <p.grad@samsung.com>
     2
     3        Video is resumed with old playback rate.
     4        https://bugs.webkit.org/show_bug.cgi?id=132905
     5
     6        Reviewed by Philippe Normand.
     7
     8        * media/video-paused-0-rate-expected.txt: Added.
     9        * media/video-paused-0-rate.html: Added.
     10
    1112014-05-22  Antti Koivisto  <antti@apple.com>
    212
  • trunk/Source/WebCore/ChangeLog

    r169199 r169200  
     12014-05-22  Piotr Grad  <p.grad@samsung.com>
     2
     3        Video is resumed with old playback rate.
     4        https://bugs.webkit.org/show_bug.cgi?id=132905
     5
     6        Reviewed by Philippe Normand.
     7
     8        Setting '0' playback rate is causing pipeline to pause.
     9        GStreamer player impl. exposed this information to upper layers but it should not.
     10        Solution is to hidden such situation behind m_playbackRatePause flag.
     11
     12        Test: media/video-paused-0-rate.html
     13
     14        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
     15        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
     16        (WebCore::MediaPlayerPrivateGStreamer::play):
     17        (WebCore::MediaPlayerPrivateGStreamer::pause):
     18        (WebCore::MediaPlayerPrivateGStreamer::doSeek):
     19        (WebCore::MediaPlayerPrivateGStreamer::updatePlaybackRate):
     20        (WebCore::MediaPlayerPrivateGStreamer::paused):
     21        (WebCore::MediaPlayerPrivateGStreamer::setRate):
     22        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
     23        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
     24
    1252014-05-22  Antti Koivisto  <antti@apple.com>
    226
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp

    r168681 r169200  
    190190    , m_resetPipeline(false)
    191191    , m_paused(true)
     192    , m_playbackRatePause(false)
    192193    , m_seeking(false)
    193194    , m_seekIsPending(false)
     
    407408void MediaPlayerPrivateGStreamer::play()
    408409{
     410    if (!m_playbackRate) {
     411        m_playbackRatePause = true;
     412        return;
     413    }
     414
    409415    if (changePipelineState(GST_STATE_PLAYING)) {
    410416        m_isEndReached = false;
     
    420426void MediaPlayerPrivateGStreamer::pause()
    421427{
     428    m_playbackRatePause = false;
    422429    GstState currentState, pendingState;
    423430    gst_element_get_state(m_playBin.get(), &currentState, &pendingState, 0);
     
    556563    }
    557564
     565    if (!rate)
     566        rate = 1.0;
     567
    558568    return gst_element_seek(m_playBin.get(), rate, GST_FORMAT_TIME, seekType,
    559569        GST_SEEK_TYPE_SET, startTime, GST_SEEK_TYPE_SET, endTime);
     
    588598        ERROR_MEDIA_MESSAGE("Set rate to %f failed", m_playbackRate);
    589599    }
     600
     601    if (m_playbackRatePause) {
     602        GstState state;
     603        GstState pending;
     604
     605        gst_element_get_state(m_playBin.get(), &state, &pending, 0);
     606        if (state != GST_STATE_PLAYING && pending != GST_STATE_PLAYING)
     607            changePipelineState(GST_STATE_PLAYING);
     608        m_playbackRatePause = false;
     609    }
     610
    590611    m_changingRate = false;
    591612    m_player->rateChanged();
     
    598619        return true;
    599620    }
     621
     622    if (m_playbackRatePause)
     623        return false;
    600624
    601625    GstState state;
     
    800824
    801825    gst_element_get_state(m_playBin.get(), &state, &pending, 0);
     826
     827    if (!rate) {
     828        m_changingRate = false;
     829        m_playbackRatePause = true;
     830        if (state != GST_STATE_PAUSED && pending != GST_STATE_PAUSED)
     831            changePipelineState(GST_STATE_PAUSED);
     832        return;
     833    }
     834
    802835    if ((state != GST_STATE_PLAYING && state != GST_STATE_PAUSED)
    803836        || (pending == GST_STATE_PAUSED))
    804837        return;
    805 
    806     if (!rate) {
    807         changePipelineState(GST_STATE_PAUSED);
    808         return;
    809     }
    810838
    811839    updatePlaybackRate();
     
    13801408            }
    13811409
    1382             if (didBuffering && !m_buffering && !m_paused) {
     1410            if (didBuffering && !m_buffering && !m_paused && m_playbackRate) {
    13831411                LOG_MEDIA_MESSAGE("[Buffering] Restarting playback.");
    13841412                changePipelineState(GST_STATE_PLAYING);
     
    13871415            m_paused = false;
    13881416
    1389             if (m_buffering && !isLiveStream()) {
     1417            if ((m_buffering && !isLiveStream()) || !m_playbackRate) {
    13901418                LOG_MEDIA_MESSAGE("[Buffering] Pausing stream for buffering.");
    13911419                changePipelineState(GST_STATE_PAUSED);
     
    14241452            m_paused = false;
    14251453
    1426         if (!m_paused)
     1454        if (!m_paused && m_playbackRate)
    14271455            changePipelineState(GST_STATE_PLAYING);
    14281456
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h

    r168420 r169200  
    178178    bool m_resetPipeline;
    179179    bool m_paused;
     180    bool m_playbackRatePause;
    180181    bool m_seeking;
    181182    bool m_seekIsPending;
Note: See TracChangeset for help on using the changeset viewer.