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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 user_agent_(user_agent), | 43 user_agent_(user_agent), |
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 volume_(-1.0), | 50 volume_(-1.0), |
51 allow_credentials_(allow_credentials), | 51 allow_credentials_(allow_credentials), |
52 weak_factory_(this) { | 52 weak_factory_(this) { |
53 listener_.reset(new MediaPlayerListener(base::MessageLoopProxy::current(), | |
54 weak_factory_.GetWeakPtr())); | |
55 } | 53 } |
56 | 54 |
57 MediaPlayerBridge::~MediaPlayerBridge() { | 55 MediaPlayerBridge::~MediaPlayerBridge() { |
58 if (!j_media_player_bridge_.is_null()) { | 56 if (!j_media_player_bridge_.is_null()) { |
59 JNIEnv* env = base::android::AttachCurrentThread(); | 57 JNIEnv* env = base::android::AttachCurrentThread(); |
60 CHECK(env); | 58 CHECK(env); |
61 Java_MediaPlayerBridge_destroy(env, j_media_player_bridge_.obj()); | 59 Java_MediaPlayerBridge_destroy(env, j_media_player_bridge_.obj()); |
62 } | 60 } |
63 Release(); | 61 Release(); |
64 } | 62 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 void MediaPlayerBridge::CreateJavaMediaPlayerBridge() { | 94 void MediaPlayerBridge::CreateJavaMediaPlayerBridge() { |
97 JNIEnv* env = base::android::AttachCurrentThread(); | 95 JNIEnv* env = base::android::AttachCurrentThread(); |
98 CHECK(env); | 96 CHECK(env); |
99 | 97 |
100 j_media_player_bridge_.Reset(Java_MediaPlayerBridge_create( | 98 j_media_player_bridge_.Reset(Java_MediaPlayerBridge_create( |
101 env, reinterpret_cast<intptr_t>(this))); | 99 env, reinterpret_cast<intptr_t>(this))); |
102 | 100 |
103 if (volume_ >= 0) | 101 if (volume_ >= 0) |
104 SetVolume(volume_); | 102 SetVolume(volume_); |
105 | 103 |
106 SetMediaPlayerListener(); | 104 AttachListener(j_media_player_bridge_.obj()); |
107 } | 105 } |
108 | 106 |
109 void MediaPlayerBridge::SetJavaMediaPlayerBridge( | 107 void MediaPlayerBridge::SetJavaMediaPlayerBridge( |
110 jobject j_media_player_bridge) { | 108 jobject j_media_player_bridge) { |
111 JNIEnv* env = base::android::AttachCurrentThread(); | 109 JNIEnv* env = base::android::AttachCurrentThread(); |
112 CHECK(env); | 110 CHECK(env); |
113 | 111 |
114 j_media_player_bridge_.Reset(env, j_media_player_bridge); | 112 j_media_player_bridge_.Reset(env, j_media_player_bridge); |
115 } | 113 } |
116 | 114 |
117 base::android::ScopedJavaLocalRef<jobject> MediaPlayerBridge:: | 115 base::android::ScopedJavaLocalRef<jobject> MediaPlayerBridge:: |
118 GetJavaMediaPlayerBridge() { | 116 GetJavaMediaPlayerBridge() { |
119 base::android::ScopedJavaLocalRef<jobject> j_bridge( | 117 base::android::ScopedJavaLocalRef<jobject> j_bridge( |
120 j_media_player_bridge_); | 118 j_media_player_bridge_); |
121 return j_bridge; | 119 return j_bridge; |
122 } | 120 } |
123 | 121 |
124 void MediaPlayerBridge::SetMediaPlayerListener() { | |
125 jobject j_context = base::android::GetApplicationContext(); | |
126 DCHECK(j_context); | |
127 | |
128 listener_->CreateMediaPlayerListener(j_context, j_media_player_bridge_.obj()); | |
129 } | |
130 | |
131 void MediaPlayerBridge::SetDuration(base::TimeDelta duration) { | 122 void MediaPlayerBridge::SetDuration(base::TimeDelta duration) { |
132 duration_ = duration; | 123 duration_ = duration; |
133 } | 124 } |
134 | 125 |
135 void MediaPlayerBridge::SetVideoSurface(gfx::ScopedJavaSurface surface) { | 126 void MediaPlayerBridge::SetVideoSurface(gfx::ScopedJavaSurface surface) { |
136 if (j_media_player_bridge_.is_null()) { | 127 if (j_media_player_bridge_.is_null()) { |
137 if (surface.IsEmpty()) | 128 if (surface.IsEmpty()) |
138 return; | 129 return; |
139 Prepare(); | 130 Prepare(); |
140 } | 131 } |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
379 | 370 |
380 time_update_timer_.Stop(); | 371 time_update_timer_.Stop(); |
381 if (prepared_) | 372 if (prepared_) |
382 pending_seek_ = GetCurrentTime(); | 373 pending_seek_ = GetCurrentTime(); |
383 prepared_ = false; | 374 prepared_ = false; |
384 pending_play_ = false; | 375 pending_play_ = false; |
385 SetVideoSurface(gfx::ScopedJavaSurface()); | 376 SetVideoSurface(gfx::ScopedJavaSurface()); |
386 JNIEnv* env = base::android::AttachCurrentThread(); | 377 JNIEnv* env = base::android::AttachCurrentThread(); |
387 Java_MediaPlayerBridge_release(env, j_media_player_bridge_.obj()); | 378 Java_MediaPlayerBridge_release(env, j_media_player_bridge_.obj()); |
388 j_media_player_bridge_.Reset(); | 379 j_media_player_bridge_.Reset(); |
389 listener_->ReleaseMediaPlayerListenerResources(); | 380 DetachListener(); |
390 } | 381 } |
391 | 382 |
392 void MediaPlayerBridge::SetVolume(double volume) { | 383 void MediaPlayerBridge::SetVolume(double volume) { |
393 if (j_media_player_bridge_.is_null()) { | 384 if (j_media_player_bridge_.is_null()) { |
394 volume_ = volume; | 385 volume_ = volume; |
395 return; | 386 return; |
396 } | 387 } |
397 | 388 |
398 JNIEnv* env = base::android::AttachCurrentThread(); | 389 JNIEnv* env = base::android::AttachCurrentThread(); |
399 CHECK(env); | 390 CHECK(env); |
400 Java_MediaPlayerBridge_setVolume( | 391 Java_MediaPlayerBridge_setVolume( |
401 env, j_media_player_bridge_.obj(), volume); | 392 env, j_media_player_bridge_.obj(), volume); |
402 } | 393 } |
403 | 394 |
404 void MediaPlayerBridge::OnVideoSizeChanged(int width, int height) { | 395 void MediaPlayerBridge::OnVideoSizeChanged(int width, int height) { |
405 width_ = width; | 396 width_ = width; |
406 height_ = height; | 397 height_ = height; |
407 manager()->OnVideoSizeChanged(player_id(), width, height); | 398 MediaPlayerAndroid::OnVideoSizeChanged(width, height); |
408 } | |
409 | |
410 void MediaPlayerBridge::OnMediaError(int error_type) { | |
411 manager()->OnError(player_id(), error_type); | |
412 } | |
413 | |
414 void MediaPlayerBridge::OnBufferingUpdate(int percent) { | |
415 manager()->OnBufferingUpdate(player_id(), percent); | |
416 } | 399 } |
417 | 400 |
418 void MediaPlayerBridge::OnPlaybackComplete() { | 401 void MediaPlayerBridge::OnPlaybackComplete() { |
419 time_update_timer_.Stop(); | 402 time_update_timer_.Stop(); |
420 manager()->OnPlaybackComplete(player_id()); | 403 MediaPlayerAndroid::OnPlaybackComplete(); |
421 } | 404 } |
422 | 405 |
423 void MediaPlayerBridge::OnMediaInterrupted() { | 406 void MediaPlayerBridge::OnMediaInterrupted() { |
424 time_update_timer_.Stop(); | 407 time_update_timer_.Stop(); |
425 manager()->OnMediaInterrupted(player_id()); | 408 MediaPlayerAndroid::OnMediaInterrupted(); |
426 } | |
427 | |
428 void MediaPlayerBridge::OnSeekComplete() { | |
429 manager()->OnSeekComplete(player_id(), GetCurrentTime()); | |
430 } | 409 } |
431 | 410 |
432 void MediaPlayerBridge::OnMediaPrepared() { | 411 void MediaPlayerBridge::OnMediaPrepared() { |
433 if (j_media_player_bridge_.is_null()) | 412 if (j_media_player_bridge_.is_null()) |
434 return; | 413 return; |
435 | 414 |
436 prepared_ = true; | 415 prepared_ = true; |
437 duration_ = GetDuration(); | 416 duration_ = GetDuration(); |
438 | 417 |
439 // If media player was recovered from a saved state, consume all the pending | 418 // If media player was recovered from a saved state, consume all the pending |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
539 | 518 |
540 GURL MediaPlayerBridge::GetUrl() { | 519 GURL MediaPlayerBridge::GetUrl() { |
541 return url_; | 520 return url_; |
542 } | 521 } |
543 | 522 |
544 GURL MediaPlayerBridge::GetFirstPartyForCookies() { | 523 GURL MediaPlayerBridge::GetFirstPartyForCookies() { |
545 return first_party_for_cookies_; | 524 return first_party_for_cookies_; |
546 } | 525 } |
547 | 526 |
548 } // namespace media | 527 } // namespace media |
OLD | NEW |