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 |