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

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

Issue 896673003: Propagate audible state from player to the containing tab (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Changed SetVolume() to report audible status. Created 5 years, 10 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 30 matching lines...) Expand all
41 should_seek_on_prepare_(false), 41 should_seek_on_prepare_(false),
42 url_(url), 42 url_(url),
43 first_party_for_cookies_(first_party_for_cookies), 43 first_party_for_cookies_(first_party_for_cookies),
44 user_agent_(user_agent), 44 user_agent_(user_agent),
45 hide_url_log_(hide_url_log), 45 hide_url_log_(hide_url_log),
46 width_(0), 46 width_(0),
47 height_(0), 47 height_(0),
48 can_pause_(true), 48 can_pause_(true),
49 can_seek_forward_(true), 49 can_seek_forward_(true),
50 can_seek_backward_(true), 50 can_seek_backward_(true),
51 volume_(-1.0), 51 initial_volume_(-1.0),
52 current_volume_(-1.0),
52 allow_credentials_(allow_credentials), 53 allow_credentials_(allow_credentials),
53 weak_factory_(this) { 54 weak_factory_(this) {
54 } 55 }
55 56
56 MediaPlayerBridge::~MediaPlayerBridge() { 57 MediaPlayerBridge::~MediaPlayerBridge() {
57 if (!j_media_player_bridge_.is_null()) { 58 if (!j_media_player_bridge_.is_null()) {
58 JNIEnv* env = base::android::AttachCurrentThread(); 59 JNIEnv* env = base::android::AttachCurrentThread();
59 CHECK(env); 60 CHECK(env);
60 Java_MediaPlayerBridge_destroy(env, j_media_player_bridge_.obj()); 61 Java_MediaPlayerBridge_destroy(env, j_media_player_bridge_.obj());
61 } 62 }
(...skipping 30 matching lines...) Expand all
92 weak_factory_.GetWeakPtr())); 93 weak_factory_.GetWeakPtr()));
93 } 94 }
94 95
95 void MediaPlayerBridge::CreateJavaMediaPlayerBridge() { 96 void MediaPlayerBridge::CreateJavaMediaPlayerBridge() {
96 JNIEnv* env = base::android::AttachCurrentThread(); 97 JNIEnv* env = base::android::AttachCurrentThread();
97 CHECK(env); 98 CHECK(env);
98 99
99 j_media_player_bridge_.Reset(Java_MediaPlayerBridge_create( 100 j_media_player_bridge_.Reset(Java_MediaPlayerBridge_create(
100 env, reinterpret_cast<intptr_t>(this))); 101 env, reinterpret_cast<intptr_t>(this)));
101 102
102 if (volume_ >= 0) 103 if (initial_volume_ >= 0)
103 SetVolume(volume_); 104 SetVolume(initial_volume_);
104 105
105 AttachListener(j_media_player_bridge_.obj()); 106 AttachListener(j_media_player_bridge_.obj());
106 } 107 }
107 108
108 void MediaPlayerBridge::SetDuration(base::TimeDelta duration) { 109 void MediaPlayerBridge::SetDuration(base::TimeDelta duration) {
109 duration_ = duration; 110 duration_ = duration;
110 } 111 }
111 112
112 void MediaPlayerBridge::SetVideoSurface(gfx::ScopedJavaSurface surface) { 113 void MediaPlayerBridge::SetVideoSurface(gfx::ScopedJavaSurface surface) {
113 if (j_media_player_bridge_.is_null()) { 114 if (j_media_player_bridge_.is_null()) {
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 const int duration_ms = 349 const int duration_ms =
349 Java_MediaPlayerBridge_getDuration(env, j_media_player_bridge_.obj()); 350 Java_MediaPlayerBridge_getDuration(env, j_media_player_bridge_.obj());
350 return duration_ms < 0 ? media::kInfiniteDuration() 351 return duration_ms < 0 ? media::kInfiniteDuration()
351 : base::TimeDelta::FromMilliseconds(duration_ms); 352 : base::TimeDelta::FromMilliseconds(duration_ms);
352 } 353 }
353 354
354 void MediaPlayerBridge::Release() { 355 void MediaPlayerBridge::Release() {
355 if (j_media_player_bridge_.is_null()) 356 if (j_media_player_bridge_.is_null())
356 return; 357 return;
357 358
359 SetAudible(false);
360
358 time_update_timer_.Stop(); 361 time_update_timer_.Stop();
359 if (prepared_) { 362 if (prepared_) {
360 pending_seek_ = GetCurrentTime(); 363 pending_seek_ = GetCurrentTime();
361 should_seek_on_prepare_ = true; 364 should_seek_on_prepare_ = true;
362 } 365 }
363 366
364 prepared_ = false; 367 prepared_ = false;
365 pending_play_ = false; 368 pending_play_ = false;
366 SetVideoSurface(gfx::ScopedJavaSurface()); 369 SetVideoSurface(gfx::ScopedJavaSurface());
367 JNIEnv* env = base::android::AttachCurrentThread(); 370 JNIEnv* env = base::android::AttachCurrentThread();
368 Java_MediaPlayerBridge_release(env, j_media_player_bridge_.obj()); 371 Java_MediaPlayerBridge_release(env, j_media_player_bridge_.obj());
369 j_media_player_bridge_.Reset(); 372 j_media_player_bridge_.Reset();
370 DetachListener(); 373 DetachListener();
371 } 374 }
372 375
373 void MediaPlayerBridge::SetVolume(double volume) { 376 void MediaPlayerBridge::SetVolume(double volume) {
374 if (j_media_player_bridge_.is_null()) { 377 if (j_media_player_bridge_.is_null()) {
375 volume_ = volume; 378 initial_volume_ = volume;
376 return; 379 return;
377 } 380 }
378 381
379 JNIEnv* env = base::android::AttachCurrentThread(); 382 JNIEnv* env = base::android::AttachCurrentThread();
380 CHECK(env); 383 CHECK(env);
384
385 // Update the audible state if we are playing.
386 jboolean is_playing = Java_MediaPlayerBridge_isPlaying(
387 env, j_media_player_bridge_.obj());
388 if (is_playing)
389 SetAudible(volume > 0);
390
381 Java_MediaPlayerBridge_setVolume( 391 Java_MediaPlayerBridge_setVolume(
382 env, j_media_player_bridge_.obj(), volume); 392 env, j_media_player_bridge_.obj(), volume);
393
394 current_volume_ = volume;
383 } 395 }
384 396
385 void MediaPlayerBridge::OnVideoSizeChanged(int width, int height) { 397 void MediaPlayerBridge::OnVideoSizeChanged(int width, int height) {
386 width_ = width; 398 width_ = width;
387 height_ = height; 399 height_ = height;
388 MediaPlayerAndroid::OnVideoSizeChanged(width, height); 400 MediaPlayerAndroid::OnVideoSizeChanged(width, height);
389 } 401 }
390 402
391 void MediaPlayerBridge::OnPlaybackComplete() { 403 void MediaPlayerBridge::OnPlaybackComplete() {
404 SetAudible(false);
392 time_update_timer_.Stop(); 405 time_update_timer_.Stop();
393 MediaPlayerAndroid::OnPlaybackComplete(); 406 MediaPlayerAndroid::OnPlaybackComplete();
394 } 407 }
395 408
396 void MediaPlayerBridge::OnMediaInterrupted() { 409 void MediaPlayerBridge::OnMediaInterrupted() {
410 SetAudible(false);
397 time_update_timer_.Stop(); 411 time_update_timer_.Stop();
398 MediaPlayerAndroid::OnMediaInterrupted(); 412 MediaPlayerAndroid::OnMediaInterrupted();
399 } 413 }
400 414
401 void MediaPlayerBridge::OnMediaPrepared() { 415 void MediaPlayerBridge::OnMediaPrepared() {
402 if (j_media_player_bridge_.is_null()) 416 if (j_media_player_bridge_.is_null())
403 return; 417 return;
404 418
405 prepared_ = true; 419 prepared_ = true;
406 duration_ = GetDuration(); 420 duration_ = GetDuration();
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 460
447 void MediaPlayerBridge::StartInternal() { 461 void MediaPlayerBridge::StartInternal() {
448 JNIEnv* env = base::android::AttachCurrentThread(); 462 JNIEnv* env = base::android::AttachCurrentThread();
449 Java_MediaPlayerBridge_start(env, j_media_player_bridge_.obj()); 463 Java_MediaPlayerBridge_start(env, j_media_player_bridge_.obj());
450 if (!time_update_timer_.IsRunning()) { 464 if (!time_update_timer_.IsRunning()) {
451 time_update_timer_.Start( 465 time_update_timer_.Start(
452 FROM_HERE, 466 FROM_HERE,
453 base::TimeDelta::FromMilliseconds(kTimeUpdateInterval), 467 base::TimeDelta::FromMilliseconds(kTimeUpdateInterval),
454 this, &MediaPlayerBridge::OnTimeUpdateTimerFired); 468 this, &MediaPlayerBridge::OnTimeUpdateTimerFired);
455 } 469 }
470
471 SetAudible(current_volume_ > 0);
456 } 472 }
457 473
458 void MediaPlayerBridge::PauseInternal() { 474 void MediaPlayerBridge::PauseInternal() {
475 SetAudible(false);
476
459 JNIEnv* env = base::android::AttachCurrentThread(); 477 JNIEnv* env = base::android::AttachCurrentThread();
460 Java_MediaPlayerBridge_pause(env, j_media_player_bridge_.obj()); 478 Java_MediaPlayerBridge_pause(env, j_media_player_bridge_.obj());
461 time_update_timer_.Stop(); 479 time_update_timer_.Stop();
462 } 480 }
463 481
464 void MediaPlayerBridge::PendingSeekInternal(const base::TimeDelta& time) { 482 void MediaPlayerBridge::PendingSeekInternal(const base::TimeDelta& time) {
465 SeekInternal(time); 483 SeekInternal(time);
466 } 484 }
467 485
468 void MediaPlayerBridge::SeekInternal(base::TimeDelta time) { 486 void MediaPlayerBridge::SeekInternal(base::TimeDelta time) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 528
511 GURL MediaPlayerBridge::GetUrl() { 529 GURL MediaPlayerBridge::GetUrl() {
512 return url_; 530 return url_;
513 } 531 }
514 532
515 GURL MediaPlayerBridge::GetFirstPartyForCookies() { 533 GURL MediaPlayerBridge::GetFirstPartyForCookies() {
516 return first_party_for_cookies_; 534 return first_party_for_cookies_;
517 } 535 }
518 536
519 } // namespace media 537 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698