Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 491 if (player) | 487 if (player) |
| 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 player->Release(); |
| 499 OnMediaResourcesReleased(player_id); | |
| 500 } | |
| 503 if (player_id == fullscreen_player_id_) | 501 if (player_id == fullscreen_player_id_) |
| 504 fullscreen_player_is_released_ = true; | 502 fullscreen_player_is_released_ = true; |
| 505 } | 503 } |
| 506 | 504 |
| 507 void BrowserMediaPlayerManager::OnDestroyPlayer(int player_id) { | 505 void BrowserMediaPlayerManager::OnDestroyPlayer(int player_id) { |
| 508 RemovePlayer(player_id); | 506 RemovePlayer(player_id); |
| 509 if (fullscreen_player_id_ == player_id) | 507 if (fullscreen_player_id_ == player_id) |
| 510 fullscreen_player_id_ = -1; | 508 fullscreen_player_id_ = -1; |
| 511 } | 509 } |
| 512 | 510 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 544 int BrowserMediaPlayerManager::RoutingID() { | 542 int BrowserMediaPlayerManager::RoutingID() { |
| 545 return render_frame_host_->GetRoutingID(); | 543 return render_frame_host_->GetRoutingID(); |
| 546 } | 544 } |
| 547 | 545 |
| 548 bool BrowserMediaPlayerManager::Send(IPC::Message* msg) { | 546 bool BrowserMediaPlayerManager::Send(IPC::Message* msg) { |
| 549 return render_frame_host_->Send(msg); | 547 return render_frame_host_->Send(msg); |
| 550 } | 548 } |
| 551 | 549 |
| 552 void BrowserMediaPlayerManager::ReleaseFullscreenPlayer( | 550 void BrowserMediaPlayerManager::ReleaseFullscreenPlayer( |
| 553 MediaPlayerAndroid* player) { | 551 MediaPlayerAndroid* player) { |
| 554 player->Release(); | 552 player->Release(); |
| 553 OnMediaResourcesReleased(player->player_id()); | |
| 555 } | 554 } |
| 556 | 555 |
| 557 void BrowserMediaPlayerManager::OnMediaResourcesRequested(int player_id) { | 556 void BrowserMediaPlayerManager::OnMediaResourcesRequested(int player_id) { |
| 558 int num_active_player = 0; | 557 int num_active_player = 0; |
| 559 ScopedVector<MediaPlayerAndroid>::iterator it; | 558 ScopedVector<MediaPlayerAndroid>::iterator it; |
| 560 for (it = players_.begin(); it != players_.end(); ++it) { | 559 for (it = players_.begin(); it != players_.end(); ++it) { |
| 561 if (!(*it)->IsPlayerReady()) | 560 if (!(*it)->IsPlayerReady()) |
| 562 continue; | 561 continue; |
| 563 | 562 |
| 564 // The player is already active, ignore it. | 563 // The player is already active, ignore it. |
| 565 if ((*it)->player_id() == player_id) | 564 if ((*it)->player_id() == player_id) |
| 566 return; | 565 return; |
| 567 else | 566 else |
| 568 num_active_player++; | 567 num_active_player++; |
| 569 } | 568 } |
| 570 | 569 |
| 571 // Number of active players are less than the threshold, do nothing. | 570 // Number of active players are less than the threshold, do nothing. |
| 572 if (num_active_player < kMediaPlayerThreshold) | 571 if (num_active_player < kMediaPlayerThreshold) |
| 573 return; | 572 return; |
| 574 | 573 |
| 575 for (it = players_.begin(); it != players_.end(); ++it) { | 574 for (it = players_.begin(); it != players_.end(); ++it) { |
| 576 if ((*it)->IsPlayerReady() && !(*it)->IsPlaying() && | 575 if ((*it)->IsPlayerReady() && !(*it)->IsPlaying() && |
| 577 fullscreen_player_id_ != (*it)->player_id()) { | 576 fullscreen_player_id_ != (*it)->player_id()) { |
| 578 (*it)->Release(); | 577 (*it)->Release(); |
| 578 OnMediaResourcesReleased(player_id); | |
|
xhwang
2014/09/03 16:36:58
This pattern appeared 3 times:
player->Release();
qinmin
2014/09/03 18:27:52
Done.
| |
| 579 Send(new MediaPlayerMsg_MediaPlayerReleased(RoutingID(), | 579 Send(new MediaPlayerMsg_MediaPlayerReleased(RoutingID(), |
| 580 (*it)->player_id())); | 580 (*it)->player_id())); |
| 581 } | 581 } |
| 582 } | 582 } |
| 583 } | 583 } |
| 584 | 584 |
| 585 void BrowserMediaPlayerManager::OnMediaResourcesReleased(int player_id) { | 585 void BrowserMediaPlayerManager::OnMediaResourcesReleased(int player_id) { |
| 586 #if defined(VIDEO_HOLE) | 586 #if defined(VIDEO_HOLE) |
| 587 MediaPlayerAndroid* player = GetPlayer(player_id); | 587 MediaPlayerAndroid* player = GetPlayer(player_id); |
| 588 if (player && player->IsSurfaceInUse()) | 588 if (player && player->IsSurfaceInUse()) |
| 589 return; | 589 return; |
| 590 if (external_video_surface_container_) | 590 if (external_video_surface_container_) |
| 591 external_video_surface_container_->ReleaseExternalVideoSurface(player_id); | 591 external_video_surface_container_->ReleaseExternalVideoSurface(player_id); |
| 592 #endif // defined(VIDEO_HOLE) | 592 #endif // defined(VIDEO_HOLE) |
| 593 } | 593 } |
| 594 | 594 |
| 595 } // namespace content | 595 } // namespace content |
| OLD | NEW |