Commit 8a6d66b9 authored by Thomas Guilbert's avatar Thomas Guilbert Committed by Commit Bot

Implement FlingingRenderer::GetMediaTime

This CL uses RemoteMediaPlayer.getApproximateStreamPosition to implement
FlingingRenderer::GetMediaTime().

NOTE: GMS core ignores stream position changes in the MediaStatus, when
we have a pending seek. Calling both Seek() and Play() back to back in
FlingingRenderer::StartPlayingFrom() sometimes causes the stream
position update to be lost. This causes getApproximateStreamPosition to
report a time that is out of sync with the cast device. We already use
the autoplay flag when loading the RemoteMediaPlayer, so removing the
call to MediaController::Play() doest not cause any problems.

Bug: 830871
Change-Id: Ia5a6384cf11a77a6aa49e9669f015f7835c5a775
Reviewed-on: https://chromium-review.googlesource.com/1180511Reviewed-by: default avatarZhiqiang Zhang <zqzhang@chromium.org>
Commit-Queue: Thomas Guilbert <tguilbert@chromium.org>
Cr-Commit-Position: refs/heads/master@{#585655}
parent b2998c3d
......@@ -46,6 +46,11 @@ public class FlingingControllerBridge implements MediaStatusObserver {
mFlingingController.getMediaController().seek(positionInMs);
}
@CalledByNative
public long getApproximateCurrentTime() {
return mFlingingController.getApproximateCurrentTime();
}
// MediaStatusObserver implementation.
@Override
public void onMediaStatusUpdate(MediaStatusBridge status) {
......
......@@ -88,8 +88,13 @@ void FlingingControllerBridge::OnMediaStatusUpdated(
}
base::TimeDelta FlingingControllerBridge::GetApproximateCurrentTime() {
// TODO(https://crbug.com/830871): Implement this method.
return base::TimeDelta();
JNIEnv* env = base::android::AttachCurrentThread();
DCHECK(env);
long time_in_ms = Java_FlingingControllerBridge_getApproximateCurrentTime(
env, j_flinging_controller_bridge_);
return base::TimeDelta::FromMilliseconds(time_in_ms);
}
} // namespace media_router
......@@ -81,7 +81,6 @@ void FlingingRenderer::Flush(const base::Closure& flush_cb) {
void FlingingRenderer::StartPlayingFrom(base::TimeDelta time) {
DVLOG(2) << __func__;
controller_->GetMediaController()->Seek(time);
controller_->GetMediaController()->Play();
}
void FlingingRenderer::SetPlaybackRate(double playback_rate) {
......@@ -98,8 +97,7 @@ void FlingingRenderer::SetVolume(float volume) {
}
base::TimeDelta FlingingRenderer::GetMediaTime() {
// TODO(https://crbug.com/830871): return correct media time.
return base::TimeDelta();
return controller_->GetApproximateCurrentTime();
}
void FlingingRenderer::OnMediaStatusUpdated(const media::MediaStatus& status) {
......
......@@ -61,14 +61,12 @@ class FlingingRendererTest : public testing::Test {
TEST_F(FlingingRendererTest, StartPlayingFromTime) {
base::TimeDelta seek_time = base::TimeDelta::FromSeconds(10);
EXPECT_CALL(*media_controller_, Play());
EXPECT_CALL(*media_controller_, Seek(seek_time));
renderer_->StartPlayingFrom(seek_time);
}
TEST_F(FlingingRendererTest, StartPlayingFromBeginning) {
EXPECT_CALL(*media_controller_, Play());
EXPECT_CALL(*media_controller_, Seek(base::TimeDelta()));
renderer_->StartPlayingFrom(base::TimeDelta());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment