blob: 1891eda1a5c4c36072afa1a456e129caccdae788 [file] [log] [blame]
/*
**
** Copyright 2023, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
#ifndef ANDROID_MEDIA_DEFAULTRESOURCEMODEL_H_
#define ANDROID_MEDIA_DEFAULTRESOURCEMODEL_H_
#include "IResourceModel.h"
namespace android {
class ResourceTracker;
/*
* Implements the Default Resource Model that handles:
* - coexistence of secure codec with another secure/non-secure codecs
* - sharing resources among other codecs
*/
class DefaultResourceModel : public IResourceModel {
public:
DefaultResourceModel(const std::shared_ptr<ResourceTracker>& resourceTracker,
bool supportsMultipleSecureCodecs = true,
bool supportsSecureWithNonSecureCodec = true);
virtual ~DefaultResourceModel();
/*
* Set the codec co-existence properties
*/
void config(bool supportsMultipleSecureCodecs, bool supportsSecureWithNonSecureCodec) {
mSupportsMultipleSecureCodecs = supportsMultipleSecureCodecs;
mSupportsSecureWithNonSecureCodec = supportsSecureWithNonSecureCodec;
}
/*
* Get a list of all clients that holds the resources requested.
* This implementation uses the ResourceModel to select the clients.
*
* @param[in] reclaimRequestInfo Information about the Reclaim request
* @param[out] cliens The list of clients that hold the resources in question.
*
* @return true if there aren't any resource conflicts and false otherwise.
*/
bool getAllClients(const ReclaimRequestInfo& reclaimRequestInfo,
std::vector<ClientInfo>& clients) override;
protected:
bool getCodecClients(const ReclaimRequestInfo& reclaimRequestInfo,
std::vector<ClientInfo>& clients);
protected:
// Keeping these protected to allow extending this implementation
// by other resource models.
bool mSupportsMultipleSecureCodecs;
bool mSupportsSecureWithNonSecureCodec;
std::shared_ptr<ResourceTracker> mResourceTracker;
};
} // namespace android
#endif // ANDROID_MEDIA_DEFAULTRESOURCEMODEL_H_