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

Side by Side Diff: content/renderer/media/android/webmediaplayer_android.cc

Issue 2239243002: Interpolate media time for mojo rendering pipeline. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/media/android/webmediaplayer_android.h" 5 #include "content/renderer/media/android/webmediaplayer_android.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <limits> 9 #include <limits>
10 10
(...skipping 830 matching lines...) Expand 10 before | Expand all | Expand 10 after
841 841
842 if (need_to_signal_duration_changed) 842 if (need_to_signal_duration_changed)
843 client_->durationChanged(); 843 client_->durationChanged();
844 } 844 }
845 845
846 void WebMediaPlayerAndroid::OnPlaybackComplete() { 846 void WebMediaPlayerAndroid::OnPlaybackComplete() {
847 // When playback is about to finish, android media player often stops 847 // When playback is about to finish, android media player often stops
848 // at a time which is smaller than the duration. This makes webkit never 848 // at a time which is smaller than the duration. This makes webkit never
849 // know that the playback has finished. To solve this, we set the 849 // know that the playback has finished. To solve this, we set the
850 // current time to media duration when OnPlaybackComplete() get called. 850 // current time to media duration when OnPlaybackComplete() get called.
851 interpolator_.SetBounds(duration_, duration_); 851 interpolator_.SetBounds(duration_, duration_, default_tick_clock_.NowTicks());
852 client_->timeChanged(); 852 client_->timeChanged();
853 853
854 // If the loop attribute is set, timeChanged() will update the current time 854 // If the loop attribute is set, timeChanged() will update the current time
855 // to 0. It will perform a seek to 0. Issue a command to the player to start 855 // to 0. It will perform a seek to 0. Issue a command to the player to start
856 // playing after seek completes. 856 // playing after seek completes.
857 if (is_playing_ && seeking_ && seek_time_.is_zero()) 857 if (is_playing_ && seeking_ && seek_time_.is_zero())
858 player_manager_->Start(player_id_); 858 player_manager_->Start(player_id_);
859 else 859 else
860 playback_completed_ = true; 860 playback_completed_ = true;
861 } 861 }
(...skipping 13 matching lines...) Expand all
875 875
876 void WebMediaPlayerAndroid::OnSeekComplete( 876 void WebMediaPlayerAndroid::OnSeekComplete(
877 const base::TimeDelta& current_time) { 877 const base::TimeDelta& current_time) {
878 DCHECK(main_thread_checker_.CalledOnValidThread()); 878 DCHECK(main_thread_checker_.CalledOnValidThread());
879 seeking_ = false; 879 seeking_ = false;
880 if (pending_seek_) { 880 if (pending_seek_) {
881 pending_seek_ = false; 881 pending_seek_ = false;
882 seek(pending_seek_time_.InSecondsF()); 882 seek(pending_seek_time_.InSecondsF());
883 return; 883 return;
884 } 884 }
885 interpolator_.SetBounds(current_time, current_time); 885 interpolator_.SetBounds(current_time, current_time,
886 default_tick_clock_.NowTicks());
886 887
887 UpdateReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); 888 UpdateReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
888 889
889 client_->timeChanged(); 890 client_->timeChanged();
890 } 891 }
891 892
892 void WebMediaPlayerAndroid::OnMediaError(int error_type) { 893 void WebMediaPlayerAndroid::OnMediaError(int error_type) {
893 switch (error_type) { 894 switch (error_type) {
894 case MediaPlayerAndroid::MEDIA_ERROR_FORMAT: 895 case MediaPlayerAndroid::MEDIA_ERROR_FORMAT:
895 UpdateNetworkState(WebMediaPlayer::NetworkStateFormatError); 896 UpdateNetworkState(WebMediaPlayer::NetworkStateFormatError);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
969 } 970 }
970 971
971 void WebMediaPlayerAndroid::OnTimeUpdate(base::TimeDelta current_timestamp, 972 void WebMediaPlayerAndroid::OnTimeUpdate(base::TimeDelta current_timestamp,
972 base::TimeTicks current_time_ticks) { 973 base::TimeTicks current_time_ticks) {
973 DCHECK(main_thread_checker_.CalledOnValidThread()); 974 DCHECK(main_thread_checker_.CalledOnValidThread());
974 975
975 if (seeking()) 976 if (seeking())
976 return; 977 return;
977 978
978 // Compensate the current_timestamp with the IPC latency. 979 // Compensate the current_timestamp with the IPC latency.
980 base::TimeTicks now_ticks = default_tick_clock_.NowTicks();
979 base::TimeDelta lower_bound = 981 base::TimeDelta lower_bound =
980 base::TimeTicks::Now() - current_time_ticks + current_timestamp; 982 now_ticks - current_time_ticks + current_timestamp;
983
981 base::TimeDelta upper_bound = lower_bound; 984 base::TimeDelta upper_bound = lower_bound;
982 // We should get another time update in about |kTimeUpdateInterval| 985 // We should get another time update in about |kTimeUpdateInterval|
983 // milliseconds. 986 // milliseconds.
984 if (is_playing_) { 987 if (is_playing_) {
985 upper_bound += base::TimeDelta::FromMilliseconds( 988 upper_bound += base::TimeDelta::FromMilliseconds(
986 media::kTimeUpdateInterval); 989 media::kTimeUpdateInterval);
987 } 990 }
988 // if the lower_bound is smaller than the current time, just use the current 991 // if the lower_bound is smaller than the current time, just use the current
989 // time so that the timer is always progressing. 992 // time so that the timer is always progressing.
990 lower_bound = 993 lower_bound =
991 std::max(lower_bound, base::TimeDelta::FromSecondsD(currentTime())); 994 std::max(lower_bound, base::TimeDelta::FromSecondsD(currentTime()));
992 if (lower_bound > upper_bound) 995 if (lower_bound > upper_bound)
993 upper_bound = lower_bound; 996 upper_bound = lower_bound;
994 interpolator_.SetBounds(lower_bound, upper_bound); 997 interpolator_.SetBounds(lower_bound, upper_bound, now_ticks);
995 } 998 }
996 999
997 void WebMediaPlayerAndroid::OnConnectedToRemoteDevice( 1000 void WebMediaPlayerAndroid::OnConnectedToRemoteDevice(
998 const std::string& remote_playback_message) { 1001 const std::string& remote_playback_message) {
999 DCHECK(main_thread_checker_.CalledOnValidThread()); 1002 DCHECK(main_thread_checker_.CalledOnValidThread());
1000 DrawRemotePlaybackText(remote_playback_message); 1003 DrawRemotePlaybackText(remote_playback_message);
1001 is_remote_ = true; 1004 is_remote_ = true;
1002 SetNeedsEstablishPeer(false); 1005 SetNeedsEstablishPeer(false);
1003 client_->connectedToRemoteDevice(); 1006 client_->connectedToRemoteDevice();
1004 } 1007 }
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after
1704 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 1707 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
1705 switches::kDisableMediaSuspend)) { 1708 switches::kDisableMediaSuspend)) {
1706 return false; 1709 return false;
1707 } 1710 }
1708 1711
1709 return base::FeatureList::IsEnabled(media::kResumeBackgroundVideo) && 1712 return base::FeatureList::IsEnabled(media::kResumeBackgroundVideo) &&
1710 hasAudio() && !isRemote() && delegate_ && delegate_->IsHidden(); 1713 hasAudio() && !isRemote() && delegate_ && delegate_->IsHidden();
1711 } 1714 }
1712 1715
1713 } // namespace content 1716 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | media/base/android/media_source_player.cc » ('j') | media/base/time_delta_interpolator.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698