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

Side by Side Diff: content/browser/media/android/browser_media_player_manager.cc

Issue 534063002: Remove OnMediaResourcesReleased callback passed to MediaPlayerAndroid (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: make ReleaseMediaResources non-virtual Created 6 years, 3 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "content/browser/media/android/browser_media_player_manager.h" 5 #include "content/browser/media/android/browser_media_player_manager.h"
6 6
7 #include "base/android/scoped_java_ref.h" 7 #include "base/android/scoped_java_ref.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "content/browser/android/content_view_core_impl.h" 9 #include "content/browser/android/content_view_core_impl.h"
10 #include "content/browser/media/android/browser_demuxer_android.h" 10 #include "content/browser/media/android/browser_demuxer_android.h"
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 const std::string user_agent = GetContentClient()->GetUserAgent(); 76 const std::string user_agent = GetContentClient()->GetUserAgent();
77 MediaPlayerBridge* media_player_bridge = new MediaPlayerBridge( 77 MediaPlayerBridge* media_player_bridge = new MediaPlayerBridge(
78 media_player_params.player_id, 78 media_player_params.player_id,
79 media_player_params.url, 79 media_player_params.url,
80 media_player_params.first_party_for_cookies, 80 media_player_params.first_party_for_cookies,
81 user_agent, 81 user_agent,
82 hide_url_log, 82 hide_url_log,
83 manager, 83 manager,
84 base::Bind(&BrowserMediaPlayerManager::OnMediaResourcesRequested, 84 base::Bind(&BrowserMediaPlayerManager::OnMediaResourcesRequested,
85 weak_ptr_factory_.GetWeakPtr()), 85 weak_ptr_factory_.GetWeakPtr()),
86 base::Bind(&BrowserMediaPlayerManager::OnMediaResourcesReleased,
87 weak_ptr_factory_.GetWeakPtr()),
88 media_player_params.frame_url, 86 media_player_params.frame_url,
89 media_player_params.allow_credentials); 87 media_player_params.allow_credentials);
90 BrowserMediaPlayerManager* browser_media_player_manager = 88 BrowserMediaPlayerManager* browser_media_player_manager =
91 static_cast<BrowserMediaPlayerManager*>(manager); 89 static_cast<BrowserMediaPlayerManager*>(manager);
92 ContentViewCoreImpl* content_view_core_impl = 90 ContentViewCoreImpl* content_view_core_impl =
93 static_cast<ContentViewCoreImpl*>(ContentViewCore::FromWebContents( 91 static_cast<ContentViewCoreImpl*>(ContentViewCore::FromWebContents(
94 browser_media_player_manager->web_contents_)); 92 browser_media_player_manager->web_contents_));
95 if (!content_view_core_impl) { 93 if (!content_view_core_impl) {
96 // May reach here due to prerendering. Don't extract the metadata 94 // May reach here due to prerendering. Don't extract the metadata
97 // since it is expensive. 95 // since it is expensive.
98 // TODO(qinmin): extract the metadata once the user decided to load 96 // TODO(qinmin): extract the metadata once the user decided to load
99 // the page. 97 // the page.
100 browser_media_player_manager->OnMediaMetadataChanged( 98 browser_media_player_manager->OnMediaMetadataChanged(
101 media_player_params.player_id, base::TimeDelta(), 0, 0, false); 99 media_player_params.player_id, base::TimeDelta(), 0, 0, false);
102 } else if (!content_view_core_impl->ShouldBlockMediaRequest( 100 } else if (!content_view_core_impl->ShouldBlockMediaRequest(
103 media_player_params.url)) { 101 media_player_params.url)) {
104 media_player_bridge->Initialize(); 102 media_player_bridge->Initialize();
105 } 103 }
106 return media_player_bridge; 104 return media_player_bridge;
107 } 105 }
108 106
109 case MEDIA_PLAYER_TYPE_MEDIA_SOURCE: { 107 case MEDIA_PLAYER_TYPE_MEDIA_SOURCE: {
110 return new MediaSourcePlayer( 108 return new MediaSourcePlayer(
111 media_player_params.player_id, 109 media_player_params.player_id,
112 manager, 110 manager,
113 base::Bind(&BrowserMediaPlayerManager::OnMediaResourcesRequested, 111 base::Bind(&BrowserMediaPlayerManager::OnMediaResourcesRequested,
114 weak_ptr_factory_.GetWeakPtr()), 112 weak_ptr_factory_.GetWeakPtr()),
115 base::Bind(&BrowserMediaPlayerManager::OnMediaResourcesReleased,
116 weak_ptr_factory_.GetWeakPtr()),
117 demuxer->CreateDemuxer(media_player_params.demuxer_client_id), 113 demuxer->CreateDemuxer(media_player_params.demuxer_client_id),
118 media_player_params.frame_url); 114 media_player_params.frame_url);
119 } 115 }
120 } 116 }
121 117
122 NOTREACHED(); 118 NOTREACHED();
123 return NULL; 119 return NULL;
124 } 120 }
125 121
126 BrowserMediaPlayerManager::BrowserMediaPlayerManager( 122 BrowserMediaPlayerManager::BrowserMediaPlayerManager(
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 player->SetVolume(volume); 488 player->SetVolume(volume);
493 } 489 }
494 490
495 void BrowserMediaPlayerManager::OnSetPoster(int player_id, const GURL& url) { 491 void BrowserMediaPlayerManager::OnSetPoster(int player_id, const GURL& url) {
496 // To be overridden by subclasses. 492 // To be overridden by subclasses.
497 } 493 }
498 494
499 void BrowserMediaPlayerManager::OnReleaseResources(int player_id) { 495 void BrowserMediaPlayerManager::OnReleaseResources(int player_id) {
500 MediaPlayerAndroid* player = GetPlayer(player_id); 496 MediaPlayerAndroid* player = GetPlayer(player_id);
501 if (player) 497 if (player)
502 player->Release(); 498 ReleasePlayer(player);
503 if (player_id == fullscreen_player_id_) 499 if (player_id == fullscreen_player_id_)
504 fullscreen_player_is_released_ = true; 500 fullscreen_player_is_released_ = true;
505 } 501 }
506 502
507 void BrowserMediaPlayerManager::OnDestroyPlayer(int player_id) { 503 void BrowserMediaPlayerManager::OnDestroyPlayer(int player_id) {
508 RemovePlayer(player_id); 504 RemovePlayer(player_id);
509 if (fullscreen_player_id_ == player_id) 505 if (fullscreen_player_id_ == player_id)
510 fullscreen_player_id_ = -1; 506 fullscreen_player_id_ = -1;
511 } 507 }
512 508
513 void BrowserMediaPlayerManager::AddPlayer(MediaPlayerAndroid* player) { 509 void BrowserMediaPlayerManager::AddPlayer(MediaPlayerAndroid* player) {
514 DCHECK(!GetPlayer(player->player_id())); 510 DCHECK(!GetPlayer(player->player_id()));
515 players_.push_back(player); 511 players_.push_back(player);
516 } 512 }
517 513
518 void BrowserMediaPlayerManager::RemovePlayer(int player_id) { 514 void BrowserMediaPlayerManager::RemovePlayer(int player_id) {
519 for (ScopedVector<MediaPlayerAndroid>::iterator it = players_.begin(); 515 for (ScopedVector<MediaPlayerAndroid>::iterator it = players_.begin();
520 it != players_.end(); ++it) { 516 it != players_.end(); ++it) {
521 MediaPlayerAndroid* player = *it; 517 if ((*it)->player_id() == player_id) {
522 if (player->player_id() == player_id) { 518 ReleaseMediaResources(player_id);
523 players_.erase(it); 519 players_.erase(it);
524 break; 520 break;
525 } 521 }
526 } 522 }
527 } 523 }
528 524
529 scoped_ptr<media::MediaPlayerAndroid> BrowserMediaPlayerManager::SwapPlayer( 525 scoped_ptr<media::MediaPlayerAndroid> BrowserMediaPlayerManager::SwapPlayer(
530 int player_id, media::MediaPlayerAndroid* player) { 526 int player_id, media::MediaPlayerAndroid* player) {
531 media::MediaPlayerAndroid* previous_player = NULL; 527 media::MediaPlayerAndroid* previous_player = NULL;
532 for (ScopedVector<MediaPlayerAndroid>::iterator it = players_.begin(); 528 for (ScopedVector<MediaPlayerAndroid>::iterator it = players_.begin();
533 it != players_.end(); ++it) { 529 it != players_.end(); ++it) {
534 if ((*it)->player_id() == player_id) { 530 if ((*it)->player_id() == player_id) {
535 previous_player = *it; 531 previous_player = *it;
532 ReleaseMediaResources(player_id);
536 players_.weak_erase(it); 533 players_.weak_erase(it);
537 players_.push_back(player); 534 players_.push_back(player);
538 break; 535 break;
539 } 536 }
540 } 537 }
541 return scoped_ptr<media::MediaPlayerAndroid>(previous_player); 538 return scoped_ptr<media::MediaPlayerAndroid>(previous_player);
542 } 539 }
543 540
544 int BrowserMediaPlayerManager::RoutingID() { 541 int BrowserMediaPlayerManager::RoutingID() {
545 return render_frame_host_->GetRoutingID(); 542 return render_frame_host_->GetRoutingID();
546 } 543 }
547 544
548 bool BrowserMediaPlayerManager::Send(IPC::Message* msg) { 545 bool BrowserMediaPlayerManager::Send(IPC::Message* msg) {
549 return render_frame_host_->Send(msg); 546 return render_frame_host_->Send(msg);
550 } 547 }
551 548
552 void BrowserMediaPlayerManager::ReleaseFullscreenPlayer( 549 void BrowserMediaPlayerManager::ReleaseFullscreenPlayer(
553 MediaPlayerAndroid* player) { 550 MediaPlayerAndroid* player) {
554 player->Release(); 551 ReleasePlayer(player);
555 } 552 }
556 553
557 void BrowserMediaPlayerManager::OnMediaResourcesRequested(int player_id) { 554 void BrowserMediaPlayerManager::OnMediaResourcesRequested(int player_id) {
558 int num_active_player = 0; 555 int num_active_player = 0;
559 ScopedVector<MediaPlayerAndroid>::iterator it; 556 ScopedVector<MediaPlayerAndroid>::iterator it;
560 for (it = players_.begin(); it != players_.end(); ++it) { 557 for (it = players_.begin(); it != players_.end(); ++it) {
561 if (!(*it)->IsPlayerReady()) 558 if (!(*it)->IsPlayerReady())
562 continue; 559 continue;
563 560
564 // The player is already active, ignore it. 561 // The player is already active, ignore it.
565 if ((*it)->player_id() == player_id) 562 if ((*it)->player_id() == player_id)
566 return; 563 return;
567 else 564 else
568 num_active_player++; 565 num_active_player++;
569 } 566 }
570 567
571 // Number of active players are less than the threshold, do nothing. 568 // Number of active players are less than the threshold, do nothing.
572 if (num_active_player < kMediaPlayerThreshold) 569 if (num_active_player < kMediaPlayerThreshold)
573 return; 570 return;
574 571
575 for (it = players_.begin(); it != players_.end(); ++it) { 572 for (it = players_.begin(); it != players_.end(); ++it) {
576 if ((*it)->IsPlayerReady() && !(*it)->IsPlaying() && 573 if ((*it)->IsPlayerReady() && !(*it)->IsPlaying() &&
577 fullscreen_player_id_ != (*it)->player_id()) { 574 fullscreen_player_id_ != (*it)->player_id()) {
578 (*it)->Release(); 575 ReleasePlayer(*it);
579 Send(new MediaPlayerMsg_MediaPlayerReleased(RoutingID(), 576 Send(new MediaPlayerMsg_MediaPlayerReleased(RoutingID(),
580 (*it)->player_id())); 577 (*it)->player_id()));
581 } 578 }
582 } 579 }
583 } 580 }
584 581
585 void BrowserMediaPlayerManager::OnMediaResourcesReleased(int player_id) { 582 void BrowserMediaPlayerManager::ReleaseMediaResources(int player_id) {
586 #if defined(VIDEO_HOLE) 583 #if defined(VIDEO_HOLE)
587 MediaPlayerAndroid* player = GetPlayer(player_id); 584 MediaPlayerAndroid* player = GetPlayer(player_id);
588 if (player && player->IsSurfaceInUse()) 585 if (player && player->IsSurfaceInUse())
589 return; 586 return;
590 if (external_video_surface_container_) 587 if (external_video_surface_container_)
591 external_video_surface_container_->ReleaseExternalVideoSurface(player_id); 588 external_video_surface_container_->ReleaseExternalVideoSurface(player_id);
592 #endif // defined(VIDEO_HOLE) 589 #endif // defined(VIDEO_HOLE)
593 } 590 }
594 591
592 void BrowserMediaPlayerManager::ReleasePlayer(MediaPlayerAndroid* player) {
593 player->Release();
594 ReleaseMediaResources(player->player_id());
595 }
596
595 } // namespace content 597 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/media/android/browser_media_player_manager.h ('k') | media/base/android/media_decoder_job.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698