Changeset 169200 in webkit
- Timestamp:
- May 22, 2014 7:57:59 AM (10 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r169199 r169200 1 2014-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 1 11 2014-05-22 Antti Koivisto <antti@apple.com> 2 12 -
trunk/Source/WebCore/ChangeLog
r169199 r169200 1 2014-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 1 25 2014-05-22 Antti Koivisto <antti@apple.com> 2 26 -
trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
r168681 r169200 190 190 , m_resetPipeline(false) 191 191 , m_paused(true) 192 , m_playbackRatePause(false) 192 193 , m_seeking(false) 193 194 , m_seekIsPending(false) … … 407 408 void MediaPlayerPrivateGStreamer::play() 408 409 { 410 if (!m_playbackRate) { 411 m_playbackRatePause = true; 412 return; 413 } 414 409 415 if (changePipelineState(GST_STATE_PLAYING)) { 410 416 m_isEndReached = false; … … 420 426 void MediaPlayerPrivateGStreamer::pause() 421 427 { 428 m_playbackRatePause = false; 422 429 GstState currentState, pendingState; 423 430 gst_element_get_state(m_playBin.get(), ¤tState, &pendingState, 0); … … 556 563 } 557 564 565 if (!rate) 566 rate = 1.0; 567 558 568 return gst_element_seek(m_playBin.get(), rate, GST_FORMAT_TIME, seekType, 559 569 GST_SEEK_TYPE_SET, startTime, GST_SEEK_TYPE_SET, endTime); … … 588 598 ERROR_MEDIA_MESSAGE("Set rate to %f failed", m_playbackRate); 589 599 } 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 590 611 m_changingRate = false; 591 612 m_player->rateChanged(); … … 598 619 return true; 599 620 } 621 622 if (m_playbackRatePause) 623 return false; 600 624 601 625 GstState state; … … 800 824 801 825 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 802 835 if ((state != GST_STATE_PLAYING && state != GST_STATE_PAUSED) 803 836 || (pending == GST_STATE_PAUSED)) 804 837 return; 805 806 if (!rate) {807 changePipelineState(GST_STATE_PAUSED);808 return;809 }810 838 811 839 updatePlaybackRate(); … … 1380 1408 } 1381 1409 1382 if (didBuffering && !m_buffering && !m_paused ) {1410 if (didBuffering && !m_buffering && !m_paused && m_playbackRate) { 1383 1411 LOG_MEDIA_MESSAGE("[Buffering] Restarting playback."); 1384 1412 changePipelineState(GST_STATE_PLAYING); … … 1387 1415 m_paused = false; 1388 1416 1389 if ( m_buffering && !isLiveStream()) {1417 if ((m_buffering && !isLiveStream()) || !m_playbackRate) { 1390 1418 LOG_MEDIA_MESSAGE("[Buffering] Pausing stream for buffering."); 1391 1419 changePipelineState(GST_STATE_PAUSED); … … 1424 1452 m_paused = false; 1425 1453 1426 if (!m_paused )1454 if (!m_paused && m_playbackRate) 1427 1455 changePipelineState(GST_STATE_PLAYING); 1428 1456 -
trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h
r168420 r169200 178 178 bool m_resetPipeline; 179 179 bool m_paused; 180 bool m_playbackRatePause; 180 181 bool m_seeking; 181 182 bool m_seekIsPending;
Note: See TracChangeset
for help on using the changeset viewer.