OLD | NEW |
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 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 const int duration_ms = | 347 const int duration_ms = |
348 Java_MediaPlayerBridge_getDuration(env, j_media_player_bridge_.obj()); | 348 Java_MediaPlayerBridge_getDuration(env, j_media_player_bridge_.obj()); |
349 return duration_ms < 0 ? media::kInfiniteDuration() | 349 return duration_ms < 0 ? media::kInfiniteDuration() |
350 : base::TimeDelta::FromMilliseconds(duration_ms); | 350 : base::TimeDelta::FromMilliseconds(duration_ms); |
351 } | 351 } |
352 | 352 |
353 void MediaPlayerBridge::Release() { | 353 void MediaPlayerBridge::Release() { |
354 if (j_media_player_bridge_.is_null()) | 354 if (j_media_player_bridge_.is_null()) |
355 return; | 355 return; |
356 | 356 |
357 SetAudible(false); | |
358 | |
359 time_update_timer_.Stop(); | 357 time_update_timer_.Stop(); |
360 if (prepared_) { | 358 if (prepared_) { |
361 pending_seek_ = GetCurrentTime(); | 359 pending_seek_ = GetCurrentTime(); |
362 should_seek_on_prepare_ = true; | 360 should_seek_on_prepare_ = true; |
363 } | 361 } |
364 | 362 |
365 prepared_ = false; | 363 prepared_ = false; |
366 pending_play_ = false; | 364 pending_play_ = false; |
367 SetVideoSurface(gfx::ScopedJavaSurface()); | 365 SetVideoSurface(gfx::ScopedJavaSurface()); |
368 JNIEnv* env = base::android::AttachCurrentThread(); | 366 JNIEnv* env = base::android::AttachCurrentThread(); |
369 Java_MediaPlayerBridge_release(env, j_media_player_bridge_.obj()); | 367 Java_MediaPlayerBridge_release(env, j_media_player_bridge_.obj()); |
370 j_media_player_bridge_.Reset(); | 368 j_media_player_bridge_.Reset(); |
371 DetachListener(); | 369 DetachListener(); |
372 } | 370 } |
373 | 371 |
374 void MediaPlayerBridge::SetVolume(double volume) { | 372 void MediaPlayerBridge::SetVolume(double volume) { |
375 volume_ = volume; | 373 if (j_media_player_bridge_.is_null()) { |
376 | 374 volume_ = volume; |
377 if (j_media_player_bridge_.is_null()) | |
378 return; | 375 return; |
| 376 } |
379 | 377 |
380 JNIEnv* env = base::android::AttachCurrentThread(); | 378 JNIEnv* env = base::android::AttachCurrentThread(); |
381 CHECK(env); | 379 CHECK(env); |
382 | 380 |
383 // Update the audible state if we are playing. | |
384 jboolean is_playing = Java_MediaPlayerBridge_isPlaying( | |
385 env, j_media_player_bridge_.obj()); | |
386 if (is_playing) | |
387 SetAudible(volume_ > 0); | |
388 | |
389 Java_MediaPlayerBridge_setVolume( | 381 Java_MediaPlayerBridge_setVolume( |
390 env, j_media_player_bridge_.obj(), volume_); | 382 env, j_media_player_bridge_.obj(), volume); |
391 } | 383 } |
392 | 384 |
393 void MediaPlayerBridge::OnVideoSizeChanged(int width, int height) { | 385 void MediaPlayerBridge::OnVideoSizeChanged(int width, int height) { |
394 width_ = width; | 386 width_ = width; |
395 height_ = height; | 387 height_ = height; |
396 MediaPlayerAndroid::OnVideoSizeChanged(width, height); | 388 MediaPlayerAndroid::OnVideoSizeChanged(width, height); |
397 } | 389 } |
398 | 390 |
399 void MediaPlayerBridge::OnPlaybackComplete() { | 391 void MediaPlayerBridge::OnPlaybackComplete() { |
400 SetAudible(false); | |
401 time_update_timer_.Stop(); | 392 time_update_timer_.Stop(); |
402 MediaPlayerAndroid::OnPlaybackComplete(); | 393 MediaPlayerAndroid::OnPlaybackComplete(); |
403 } | 394 } |
404 | 395 |
405 void MediaPlayerBridge::OnMediaInterrupted() { | 396 void MediaPlayerBridge::OnMediaInterrupted() { |
406 SetAudible(false); | |
407 time_update_timer_.Stop(); | 397 time_update_timer_.Stop(); |
408 MediaPlayerAndroid::OnMediaInterrupted(); | 398 MediaPlayerAndroid::OnMediaInterrupted(); |
409 } | 399 } |
410 | 400 |
411 void MediaPlayerBridge::OnMediaPrepared() { | 401 void MediaPlayerBridge::OnMediaPrepared() { |
412 if (j_media_player_bridge_.is_null()) | 402 if (j_media_player_bridge_.is_null()) |
413 return; | 403 return; |
414 | 404 |
415 prepared_ = true; | 405 prepared_ = true; |
416 duration_ = GetDuration(); | 406 duration_ = GetDuration(); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
461 } | 451 } |
462 | 452 |
463 JNIEnv* env = base::android::AttachCurrentThread(); | 453 JNIEnv* env = base::android::AttachCurrentThread(); |
464 Java_MediaPlayerBridge_start(env, j_media_player_bridge_.obj()); | 454 Java_MediaPlayerBridge_start(env, j_media_player_bridge_.obj()); |
465 if (!time_update_timer_.IsRunning()) { | 455 if (!time_update_timer_.IsRunning()) { |
466 time_update_timer_.Start( | 456 time_update_timer_.Start( |
467 FROM_HERE, | 457 FROM_HERE, |
468 base::TimeDelta::FromMilliseconds(kTimeUpdateInterval), | 458 base::TimeDelta::FromMilliseconds(kTimeUpdateInterval), |
469 this, &MediaPlayerBridge::OnTimeUpdateTimerFired); | 459 this, &MediaPlayerBridge::OnTimeUpdateTimerFired); |
470 } | 460 } |
471 | |
472 SetAudible(volume_ > 0); | |
473 } | 461 } |
474 | 462 |
475 void MediaPlayerBridge::PauseInternal() { | 463 void MediaPlayerBridge::PauseInternal() { |
476 SetAudible(false); | |
477 | |
478 JNIEnv* env = base::android::AttachCurrentThread(); | 464 JNIEnv* env = base::android::AttachCurrentThread(); |
479 Java_MediaPlayerBridge_pause(env, j_media_player_bridge_.obj()); | 465 Java_MediaPlayerBridge_pause(env, j_media_player_bridge_.obj()); |
480 time_update_timer_.Stop(); | 466 time_update_timer_.Stop(); |
481 } | 467 } |
482 | 468 |
483 void MediaPlayerBridge::PendingSeekInternal(const base::TimeDelta& time) { | 469 void MediaPlayerBridge::PendingSeekInternal(const base::TimeDelta& time) { |
484 SeekInternal(GetCurrentTime(), time); | 470 SeekInternal(GetCurrentTime(), time); |
485 } | 471 } |
486 | 472 |
487 bool MediaPlayerBridge::SeekInternal(base::TimeDelta current_time, | 473 bool MediaPlayerBridge::SeekInternal(base::TimeDelta current_time, |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
539 | 525 |
540 GURL MediaPlayerBridge::GetUrl() { | 526 GURL MediaPlayerBridge::GetUrl() { |
541 return url_; | 527 return url_; |
542 } | 528 } |
543 | 529 |
544 GURL MediaPlayerBridge::GetFirstPartyForCookies() { | 530 GURL MediaPlayerBridge::GetFirstPartyForCookies() { |
545 return first_party_for_cookies_; | 531 return first_party_for_cookies_; |
546 } | 532 } |
547 | 533 |
548 } // namespace media | 534 } // namespace media |
OLD | NEW |