blob: acadb2d06d3b4fd7f9aa3c23bbffcf14c0831e3c [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "webkit/media/android/media_player_bridge_manager_impl.h"
#include "media/base/android/media_player_bridge.h"
namespace webkit_media {
MediaPlayerBridgeManagerImpl::MediaPlayerBridgeManagerImpl(
int threshold)
: active_player_threshold_(threshold) {
}
MediaPlayerBridgeManagerImpl::~MediaPlayerBridgeManagerImpl() {}
void MediaPlayerBridgeManagerImpl::RequestMediaResources(
media::MediaPlayerBridge* player) {
if (!player)
return;
int num_active_player = 0;
std::vector<media::MediaPlayerBridge*>::iterator it;
for (it = players_.begin(); it != players_.end(); ++it) {
// The player is already active, ignore it.
if ((*it) == player)
return;
num_active_player++;
}
if (num_active_player < active_player_threshold_) {
players_.push_back(player);
return;
}
// Get a list of the players to free.
std::vector<media::MediaPlayerBridge*> players_to_release;
for (it = players_.begin(); it != players_.end(); ++it) {
if ((*it)->prepared() && !(*it)->IsPlaying())
players_to_release.push_back(*it);
}
// Calling release() will result in a call to ReleaseMediaResources(), so
// the player will be removed from |players_|.
for (it = players_to_release.begin(); it != players_to_release.end(); ++it)
(*it)->Release();
players_.push_back(player);
}
void MediaPlayerBridgeManagerImpl::ReleaseMediaResources(
media::MediaPlayerBridge* player) {
for (std::vector<media::MediaPlayerBridge*>::iterator it = players_.begin();
it != players_.end(); ++it) {
if ((*it) == player) {
players_.erase(it);
return;
}
}
}
} // namespace webkit_media