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

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

Issue 643353002: Listen to the audio focus event for MSE/EME (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698