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 |