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

Side by Side Diff: media/base/android/media_player_bridge.cc

Issue 1234483003: Prevent seeking when Android MediaPlayer reports that it's not possible. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments from qinmin. Created 5 years, 5 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "media/base/android/media_player_bridge.h" 5 #include "media/base/android/media_player_bridge.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_string.h" 8 #include "base/android/jni_string.h"
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 } 321 }
322 322
323 void MediaPlayerBridge::SeekTo(base::TimeDelta timestamp) { 323 void MediaPlayerBridge::SeekTo(base::TimeDelta timestamp) {
324 // Record the time to seek when OnMediaPrepared() is called. 324 // Record the time to seek when OnMediaPrepared() is called.
325 pending_seek_ = timestamp; 325 pending_seek_ = timestamp;
326 should_seek_on_prepare_ = true; 326 should_seek_on_prepare_ = true;
327 327
328 if (j_media_player_bridge_.is_null()) 328 if (j_media_player_bridge_.is_null())
329 Prepare(); 329 Prepare();
330 else if (prepared_) 330 else if (prepared_)
331 SeekInternal(timestamp); 331 SeekInternal(GetCurrentTime(), timestamp);
332 } 332 }
333 333
334 base::TimeDelta MediaPlayerBridge::GetCurrentTime() { 334 base::TimeDelta MediaPlayerBridge::GetCurrentTime() {
335 if (!prepared_) 335 if (!prepared_)
336 return pending_seek_; 336 return pending_seek_;
337 JNIEnv* env = base::android::AttachCurrentThread(); 337 JNIEnv* env = base::android::AttachCurrentThread();
338 return base::TimeDelta::FromMilliseconds( 338 return base::TimeDelta::FromMilliseconds(
339 Java_MediaPlayerBridge_getCurrentPosition( 339 Java_MediaPlayerBridge_getCurrentPosition(
340 env, j_media_player_bridge_.obj())); 340 env, j_media_player_bridge_.obj()));
341 } 341 }
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 474
475 void MediaPlayerBridge::PauseInternal() { 475 void MediaPlayerBridge::PauseInternal() {
476 SetAudible(false); 476 SetAudible(false);
477 477
478 JNIEnv* env = base::android::AttachCurrentThread(); 478 JNIEnv* env = base::android::AttachCurrentThread();
479 Java_MediaPlayerBridge_pause(env, j_media_player_bridge_.obj()); 479 Java_MediaPlayerBridge_pause(env, j_media_player_bridge_.obj());
480 time_update_timer_.Stop(); 480 time_update_timer_.Stop();
481 } 481 }
482 482
483 void MediaPlayerBridge::PendingSeekInternal(const base::TimeDelta& time) { 483 void MediaPlayerBridge::PendingSeekInternal(const base::TimeDelta& time) {
484 SeekInternal(time); 484 SeekInternal(GetCurrentTime(), time);
485 } 485 }
486 486
487 void MediaPlayerBridge::SeekInternal(base::TimeDelta time) { 487 bool MediaPlayerBridge::SeekInternal(base::TimeDelta current_time,
488 base::TimeDelta time) {
489 // Seeking on content like live streams may cause the media player to
490 // get stuck in an error state.
491 if (time < current_time && !CanSeekBackward())
492 return false;
493
494 if (time >= current_time && !CanSeekForward())
495 return false;
496
488 if (time > duration_) 497 if (time > duration_)
489 time = duration_; 498 time = duration_;
490 499
491 // Seeking to an invalid position may cause media player to stuck in an 500 // Seeking to an invalid position may cause media player to stuck in an
492 // error state. 501 // error state.
493 if (time < base::TimeDelta()) { 502 if (time < base::TimeDelta()) {
494 DCHECK_EQ(-1.0, time.InMillisecondsF()); 503 DCHECK_EQ(-1.0, time.InMillisecondsF());
495 return; 504 return false;
496 } 505 }
497 506
498 JNIEnv* env = base::android::AttachCurrentThread(); 507 JNIEnv* env = base::android::AttachCurrentThread();
499 CHECK(env); 508 CHECK(env);
500 int time_msec = static_cast<int>(time.InMilliseconds()); 509 int time_msec = static_cast<int>(time.InMilliseconds());
501 Java_MediaPlayerBridge_seekTo( 510 Java_MediaPlayerBridge_seekTo(
502 env, j_media_player_bridge_.obj(), time_msec); 511 env, j_media_player_bridge_.obj(), time_msec);
512 return true;
503 } 513 }
504 514
505 void MediaPlayerBridge::OnTimeUpdateTimerFired() { 515 void MediaPlayerBridge::OnTimeUpdateTimerFired() {
506 manager()->OnTimeUpdate( 516 manager()->OnTimeUpdate(
507 player_id(), GetCurrentTime(), base::TimeTicks::Now()); 517 player_id(), GetCurrentTime(), base::TimeTicks::Now());
508 } 518 }
509 519
510 bool MediaPlayerBridge::RegisterMediaPlayerBridge(JNIEnv* env) { 520 bool MediaPlayerBridge::RegisterMediaPlayerBridge(JNIEnv* env) {
511 return RegisterNativesImpl(env); 521 return RegisterNativesImpl(env);
512 } 522 }
(...skipping 16 matching lines...) Expand all
529 539
530 GURL MediaPlayerBridge::GetUrl() { 540 GURL MediaPlayerBridge::GetUrl() {
531 return url_; 541 return url_;
532 } 542 }
533 543
534 GURL MediaPlayerBridge::GetFirstPartyForCookies() { 544 GURL MediaPlayerBridge::GetFirstPartyForCookies() {
535 return first_party_for_cookies_; 545 return first_party_for_cookies_;
536 } 546 }
537 547
538 } // namespace media 548 } // namespace media
OLDNEW
« no previous file with comments | « media/base/android/media_player_bridge.h ('k') | media/base/android/media_player_bridge_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698