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

Unified Diff: media/blink/webmediaplayer_impl.cc

Issue 2366373003: Not for submission. fastSeek prototype. (Closed)
Patch Set: Created 4 years, 3 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
« no previous file with comments | « media/blink/webmediaplayer_impl.h ('k') | media/filters/pipeline_controller.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/blink/webmediaplayer_impl.cc
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
index 7c67743e982b430e3c7794a1e1d2a3310806ee3c..bdd19cbff8ad078f50001176bc66c7658bff8d4d 100644
--- a/media/blink/webmediaplayer_impl.cc
+++ b/media/blink/webmediaplayer_impl.cc
@@ -34,6 +34,7 @@
#include "media/base/media_content_type.h"
#include "media/base/media_log.h"
#include "media/base/media_switches.h"
+#include "media/base/stream_position.h"
#include "media/base/text_renderer.h"
#include "media/base/timestamp_constants.h"
#include "media/base/video_frame.h"
@@ -445,15 +446,24 @@ bool WebMediaPlayerImpl::supportsSave() const {
void WebMediaPlayerImpl::seek(double seconds) {
DVLOG(1) << __func__ << "(" << seconds << "s)";
DCHECK(main_task_runner_->BelongsToCurrentThread());
- DoSeek(base::TimeDelta::FromSecondsD(seconds), true);
+ DoSeek(StreamPosition::KeyFramePrecedingTime(
+ base::TimeDelta::FromSecondsD(seconds)),
+ true);
}
-void WebMediaPlayerImpl::DoSeek(base::TimeDelta time, bool time_updated) {
+void WebMediaPlayerImpl::fastSeek(double seconds) {
+ DVLOG(1) << __func__ << "(" << seconds << "s)";
+ DCHECK(main_task_runner_->BelongsToCurrentThread());
+ DoSeek(StreamPosition::Precise(base::TimeDelta::FromSecondsD(seconds)), true);
+}
+
+void WebMediaPlayerImpl::DoSeek(StreamPosition position, bool time_updated) {
DCHECK(main_task_runner_->BelongsToCurrentThread());
#if defined(OS_ANDROID) // WMPI_CAST
if (isRemote()) {
- cast_impl_.seek(time);
+ // XXX: Revisit.
+ cast_impl_.seek(position.time);
return;
}
#endif
@@ -470,8 +480,8 @@ void WebMediaPlayerImpl::DoSeek(base::TimeDelta time, bool time_updated) {
// 2) For MSE.
// Because the buffers may have changed between seeks, MSE seeks are
// never elided.
- if (paused_ && pipeline_controller_.IsStable() && paused_time_ == time &&
- !chunk_demuxer_) {
+ if (paused_ && pipeline_controller_.IsStable() &&
+ paused_time_ == position.time && !chunk_demuxer_) {
// If the ready state was high enough before, we can indicate that the seek
// completed just by restoring it. Otherwise we will just wait for the real
// ready state change to eventually happen.
@@ -494,10 +504,12 @@ void WebMediaPlayerImpl::DoSeek(base::TimeDelta time, bool time_updated) {
ended_ = false;
seeking_ = true;
- seek_time_ = time;
+ // XXX: Revisit. The page can observe time going backwards, but Android has
+ // always had this problem.
+ seek_time_ = position.time;
if (paused_)
- paused_time_ = time;
- pipeline_controller_.Seek(time, time_updated);
+ paused_time_ = position.time;
+ pipeline_controller_.Seek(position, time_updated);
// This needs to be called after Seek() so that if a resume is triggered, it
// is to the correct time.
@@ -1319,7 +1331,7 @@ void WebMediaPlayerImpl::OnRemotePlaybackEnded() {
}
void WebMediaPlayerImpl::OnDisconnectedFromRemoteDevice(double t) {
- DoSeek(base::TimeDelta::FromSecondsD(t), false);
+ DoSeek(StreamPosition::Precise(base::TimeDelta::FromSecondsD(t)), false);
// We already told the delegate we're paused when remoting started.
client_->playbackStateChanged();
« no previous file with comments | « media/blink/webmediaplayer_impl.h ('k') | media/filters/pipeline_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698