Chromium Code Reviews| 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 44 hide_url_log_(hide_url_log), | 44 hide_url_log_(hide_url_log), |
| 45 width_(0), | 45 width_(0), |
| 46 height_(0), | 46 height_(0), |
| 47 can_pause_(true), | 47 can_pause_(true), |
| 48 can_seek_forward_(true), | 48 can_seek_forward_(true), |
| 49 can_seek_backward_(true), | 49 can_seek_backward_(true), |
| 50 is_surface_in_use_(false), | 50 is_surface_in_use_(false), |
| 51 volume_(-1.0), | 51 volume_(-1.0), |
| 52 allow_credentials_(allow_credentials), | 52 allow_credentials_(allow_credentials), |
| 53 weak_factory_(this) { | 53 weak_factory_(this) { |
| 54 listener_.reset(new MediaPlayerListener(base::MessageLoopProxy::current(), | |
| 55 weak_factory_.GetWeakPtr())); | |
| 56 } | 54 } |
| 57 | 55 |
| 58 MediaPlayerBridge::~MediaPlayerBridge() { | 56 MediaPlayerBridge::~MediaPlayerBridge() { |
| 59 if (!j_media_player_bridge_.is_null()) { | 57 if (!j_media_player_bridge_.is_null()) { |
| 60 JNIEnv* env = base::android::AttachCurrentThread(); | 58 JNIEnv* env = base::android::AttachCurrentThread(); |
| 61 CHECK(env); | 59 CHECK(env); |
| 62 Java_MediaPlayerBridge_destroy(env, j_media_player_bridge_.obj()); | 60 Java_MediaPlayerBridge_destroy(env, j_media_player_bridge_.obj()); |
| 63 } | 61 } |
| 64 Release(); | 62 Release(); |
| 65 } | 63 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 97 void MediaPlayerBridge::CreateJavaMediaPlayerBridge() { | 95 void MediaPlayerBridge::CreateJavaMediaPlayerBridge() { |
| 98 JNIEnv* env = base::android::AttachCurrentThread(); | 96 JNIEnv* env = base::android::AttachCurrentThread(); |
| 99 CHECK(env); | 97 CHECK(env); |
| 100 | 98 |
| 101 j_media_player_bridge_.Reset(Java_MediaPlayerBridge_create( | 99 j_media_player_bridge_.Reset(Java_MediaPlayerBridge_create( |
| 102 env, reinterpret_cast<intptr_t>(this))); | 100 env, reinterpret_cast<intptr_t>(this))); |
| 103 | 101 |
| 104 if (volume_ >= 0) | 102 if (volume_ >= 0) |
| 105 SetVolume(volume_); | 103 SetVolume(volume_); |
| 106 | 104 |
| 107 SetMediaPlayerListener(); | 105 AttachListener(j_media_player_bridge_.obj()); |
|
xhwang
2014/10/14 18:23:30
Where do we detach listener?
qinmin
2014/10/14 21:55:51
good catch, should be in release() call. Fixed.
| |
| 108 } | 106 } |
| 109 | 107 |
| 110 void MediaPlayerBridge::SetJavaMediaPlayerBridge( | 108 void MediaPlayerBridge::SetJavaMediaPlayerBridge( |
| 111 jobject j_media_player_bridge) { | 109 jobject j_media_player_bridge) { |
| 112 JNIEnv* env = base::android::AttachCurrentThread(); | 110 JNIEnv* env = base::android::AttachCurrentThread(); |
| 113 CHECK(env); | 111 CHECK(env); |
| 114 | 112 |
| 115 j_media_player_bridge_.Reset(env, j_media_player_bridge); | 113 j_media_player_bridge_.Reset(env, j_media_player_bridge); |
| 116 } | 114 } |
| 117 | 115 |
| 118 base::android::ScopedJavaLocalRef<jobject> MediaPlayerBridge:: | 116 base::android::ScopedJavaLocalRef<jobject> MediaPlayerBridge:: |
| 119 GetJavaMediaPlayerBridge() { | 117 GetJavaMediaPlayerBridge() { |
| 120 base::android::ScopedJavaLocalRef<jobject> j_bridge( | 118 base::android::ScopedJavaLocalRef<jobject> j_bridge( |
| 121 j_media_player_bridge_); | 119 j_media_player_bridge_); |
| 122 return j_bridge; | 120 return j_bridge; |
| 123 } | 121 } |
| 124 | 122 |
| 125 void MediaPlayerBridge::SetMediaPlayerListener() { | |
| 126 jobject j_context = base::android::GetApplicationContext(); | |
| 127 DCHECK(j_context); | |
| 128 | |
| 129 listener_->CreateMediaPlayerListener(j_context, j_media_player_bridge_.obj()); | |
| 130 } | |
| 131 | |
| 132 void MediaPlayerBridge::SetDuration(base::TimeDelta duration) { | 123 void MediaPlayerBridge::SetDuration(base::TimeDelta duration) { |
| 133 duration_ = duration; | 124 duration_ = duration; |
| 134 } | 125 } |
| 135 | 126 |
| 136 void MediaPlayerBridge::SetVideoSurface(gfx::ScopedJavaSurface surface) { | 127 void MediaPlayerBridge::SetVideoSurface(gfx::ScopedJavaSurface surface) { |
| 137 if (j_media_player_bridge_.is_null()) { | 128 if (j_media_player_bridge_.is_null()) { |
| 138 if (surface.IsEmpty()) | 129 if (surface.IsEmpty()) |
| 139 return; | 130 return; |
| 140 Prepare(); | 131 Prepare(); |
| 141 } | 132 } |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 382 time_update_timer_.Stop(); | 373 time_update_timer_.Stop(); |
| 383 if (prepared_) | 374 if (prepared_) |
| 384 pending_seek_ = GetCurrentTime(); | 375 pending_seek_ = GetCurrentTime(); |
| 385 prepared_ = false; | 376 prepared_ = false; |
| 386 pending_play_ = false; | 377 pending_play_ = false; |
| 387 is_surface_in_use_ = false; | 378 is_surface_in_use_ = false; |
| 388 SetVideoSurface(gfx::ScopedJavaSurface()); | 379 SetVideoSurface(gfx::ScopedJavaSurface()); |
| 389 JNIEnv* env = base::android::AttachCurrentThread(); | 380 JNIEnv* env = base::android::AttachCurrentThread(); |
| 390 Java_MediaPlayerBridge_release(env, j_media_player_bridge_.obj()); | 381 Java_MediaPlayerBridge_release(env, j_media_player_bridge_.obj()); |
| 391 j_media_player_bridge_.Reset(); | 382 j_media_player_bridge_.Reset(); |
| 392 listener_->ReleaseMediaPlayerListenerResources(); | |
| 393 } | 383 } |
| 394 | 384 |
| 395 void MediaPlayerBridge::SetVolume(double volume) { | 385 void MediaPlayerBridge::SetVolume(double volume) { |
| 396 if (j_media_player_bridge_.is_null()) { | 386 if (j_media_player_bridge_.is_null()) { |
| 397 volume_ = volume; | 387 volume_ = volume; |
| 398 return; | 388 return; |
| 399 } | 389 } |
| 400 | 390 |
| 401 JNIEnv* env = base::android::AttachCurrentThread(); | 391 JNIEnv* env = base::android::AttachCurrentThread(); |
| 402 CHECK(env); | 392 CHECK(env); |
| 403 Java_MediaPlayerBridge_setVolume( | 393 Java_MediaPlayerBridge_setVolume( |
| 404 env, j_media_player_bridge_.obj(), volume); | 394 env, j_media_player_bridge_.obj(), volume); |
| 405 } | 395 } |
| 406 | 396 |
| 407 void MediaPlayerBridge::OnVideoSizeChanged(int width, int height) { | 397 void MediaPlayerBridge::OnVideoSizeChanged(int width, int height) { |
| 408 width_ = width; | 398 width_ = width; |
| 409 height_ = height; | 399 height_ = height; |
| 410 manager()->OnVideoSizeChanged(player_id(), width, height); | 400 MediaPlayerAndroid::OnVideoSizeChanged(width, height); |
| 411 } | |
| 412 | |
| 413 void MediaPlayerBridge::OnMediaError(int error_type) { | |
| 414 manager()->OnError(player_id(), error_type); | |
| 415 } | |
| 416 | |
| 417 void MediaPlayerBridge::OnBufferingUpdate(int percent) { | |
| 418 manager()->OnBufferingUpdate(player_id(), percent); | |
| 419 } | 401 } |
| 420 | 402 |
| 421 void MediaPlayerBridge::OnPlaybackComplete() { | 403 void MediaPlayerBridge::OnPlaybackComplete() { |
| 422 time_update_timer_.Stop(); | 404 time_update_timer_.Stop(); |
| 423 manager()->OnPlaybackComplete(player_id()); | 405 MediaPlayerAndroid::OnPlaybackComplete(); |
| 424 } | 406 } |
| 425 | 407 |
| 426 void MediaPlayerBridge::OnMediaInterrupted() { | 408 void MediaPlayerBridge::OnMediaInterrupted() { |
| 427 time_update_timer_.Stop(); | 409 time_update_timer_.Stop(); |
| 428 manager()->OnMediaInterrupted(player_id()); | 410 MediaPlayerAndroid::OnMediaInterrupted(); |
| 429 } | |
| 430 | |
| 431 void MediaPlayerBridge::OnSeekComplete() { | |
| 432 manager()->OnSeekComplete(player_id(), GetCurrentTime()); | |
| 433 } | 411 } |
| 434 | 412 |
| 435 void MediaPlayerBridge::OnMediaPrepared() { | 413 void MediaPlayerBridge::OnMediaPrepared() { |
| 436 if (j_media_player_bridge_.is_null()) | 414 if (j_media_player_bridge_.is_null()) |
| 437 return; | 415 return; |
| 438 | 416 |
| 439 prepared_ = true; | 417 prepared_ = true; |
| 440 duration_ = GetDuration(); | 418 duration_ = GetDuration(); |
| 441 | 419 |
| 442 // If media player was recovered from a saved state, consume all the pending | 420 // If media player was recovered from a saved state, consume all the pending |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 546 | 524 |
| 547 GURL MediaPlayerBridge::GetFirstPartyForCookies() { | 525 GURL MediaPlayerBridge::GetFirstPartyForCookies() { |
| 548 return first_party_for_cookies_; | 526 return first_party_for_cookies_; |
| 549 } | 527 } |
| 550 | 528 |
| 551 bool MediaPlayerBridge::IsSurfaceInUse() const { | 529 bool MediaPlayerBridge::IsSurfaceInUse() const { |
| 552 return is_surface_in_use_; | 530 return is_surface_in_use_; |
| 553 } | 531 } |
| 554 | 532 |
| 555 } // namespace media | 533 } // namespace media |
| OLD | NEW |