1*ec779b8eSAndroid Build Coastguard Worker /* 2*ec779b8eSAndroid Build Coastguard Worker ** 3*ec779b8eSAndroid Build Coastguard Worker ** Copyright 2023, The Android Open Source Project 4*ec779b8eSAndroid Build Coastguard Worker ** 5*ec779b8eSAndroid Build Coastguard Worker ** Licensed under the Apache License, Version 2.0 (the "License"); 6*ec779b8eSAndroid Build Coastguard Worker ** you may not use this file except in compliance with the License. 7*ec779b8eSAndroid Build Coastguard Worker ** You may obtain a copy of the License at 8*ec779b8eSAndroid Build Coastguard Worker ** 9*ec779b8eSAndroid Build Coastguard Worker ** http://www.apache.org/licenses/LICENSE-2.0 10*ec779b8eSAndroid Build Coastguard Worker ** 11*ec779b8eSAndroid Build Coastguard Worker ** Unless required by applicable law or agreed to in writing, software 12*ec779b8eSAndroid Build Coastguard Worker ** distributed under the License is distributed on an "AS IS" BASIS, 13*ec779b8eSAndroid Build Coastguard Worker ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*ec779b8eSAndroid Build Coastguard Worker ** See the License for the specific language governing permissions and 15*ec779b8eSAndroid Build Coastguard Worker ** limitations under the License. 16*ec779b8eSAndroid Build Coastguard Worker */ 17*ec779b8eSAndroid Build Coastguard Worker 18*ec779b8eSAndroid Build Coastguard Worker #ifndef ANDROID_MEDIA_DEFAULTRESOURCEMODEL_H_ 19*ec779b8eSAndroid Build Coastguard Worker #define ANDROID_MEDIA_DEFAULTRESOURCEMODEL_H_ 20*ec779b8eSAndroid Build Coastguard Worker 21*ec779b8eSAndroid Build Coastguard Worker #include "IResourceModel.h" 22*ec779b8eSAndroid Build Coastguard Worker 23*ec779b8eSAndroid Build Coastguard Worker namespace android { 24*ec779b8eSAndroid Build Coastguard Worker 25*ec779b8eSAndroid Build Coastguard Worker class ResourceTracker; 26*ec779b8eSAndroid Build Coastguard Worker 27*ec779b8eSAndroid Build Coastguard Worker /* 28*ec779b8eSAndroid Build Coastguard Worker * Implements the Default Resource Model that handles: 29*ec779b8eSAndroid Build Coastguard Worker * - coexistence of secure codec with another secure/non-secure codecs 30*ec779b8eSAndroid Build Coastguard Worker * - sharing resources among other codecs 31*ec779b8eSAndroid Build Coastguard Worker */ 32*ec779b8eSAndroid Build Coastguard Worker class DefaultResourceModel : public IResourceModel { 33*ec779b8eSAndroid Build Coastguard Worker public: 34*ec779b8eSAndroid Build Coastguard Worker DefaultResourceModel(const std::shared_ptr<ResourceTracker>& resourceTracker, 35*ec779b8eSAndroid Build Coastguard Worker bool supportsMultipleSecureCodecs = true, 36*ec779b8eSAndroid Build Coastguard Worker bool supportsSecureWithNonSecureCodec = true); 37*ec779b8eSAndroid Build Coastguard Worker virtual ~DefaultResourceModel(); 38*ec779b8eSAndroid Build Coastguard Worker 39*ec779b8eSAndroid Build Coastguard Worker /* 40*ec779b8eSAndroid Build Coastguard Worker * Set the codec co-existence properties 41*ec779b8eSAndroid Build Coastguard Worker */ config(bool supportsMultipleSecureCodecs,bool supportsSecureWithNonSecureCodec)42*ec779b8eSAndroid Build Coastguard Worker void config(bool supportsMultipleSecureCodecs, bool supportsSecureWithNonSecureCodec) { 43*ec779b8eSAndroid Build Coastguard Worker mSupportsMultipleSecureCodecs = supportsMultipleSecureCodecs; 44*ec779b8eSAndroid Build Coastguard Worker mSupportsSecureWithNonSecureCodec = supportsSecureWithNonSecureCodec; 45*ec779b8eSAndroid Build Coastguard Worker } 46*ec779b8eSAndroid Build Coastguard Worker 47*ec779b8eSAndroid Build Coastguard Worker /* 48*ec779b8eSAndroid Build Coastguard Worker * Get a list of all clients that holds the resources requested. 49*ec779b8eSAndroid Build Coastguard Worker * This implementation uses the ResourceModel to select the clients. 50*ec779b8eSAndroid Build Coastguard Worker * 51*ec779b8eSAndroid Build Coastguard Worker * @param[in] reclaimRequestInfo Information about the Reclaim request 52*ec779b8eSAndroid Build Coastguard Worker * @param[out] cliens The list of clients that hold the resources in question. 53*ec779b8eSAndroid Build Coastguard Worker * 54*ec779b8eSAndroid Build Coastguard Worker * @return true if there aren't any resource conflicts and false otherwise. 55*ec779b8eSAndroid Build Coastguard Worker */ 56*ec779b8eSAndroid Build Coastguard Worker bool getAllClients(const ReclaimRequestInfo& reclaimRequestInfo, 57*ec779b8eSAndroid Build Coastguard Worker std::vector<ClientInfo>& clients) override; 58*ec779b8eSAndroid Build Coastguard Worker 59*ec779b8eSAndroid Build Coastguard Worker protected: 60*ec779b8eSAndroid Build Coastguard Worker bool getCodecClients(const ReclaimRequestInfo& reclaimRequestInfo, 61*ec779b8eSAndroid Build Coastguard Worker std::vector<ClientInfo>& clients); 62*ec779b8eSAndroid Build Coastguard Worker 63*ec779b8eSAndroid Build Coastguard Worker protected: 64*ec779b8eSAndroid Build Coastguard Worker // Keeping these protected to allow extending this implementation 65*ec779b8eSAndroid Build Coastguard Worker // by other resource models. 66*ec779b8eSAndroid Build Coastguard Worker bool mSupportsMultipleSecureCodecs; 67*ec779b8eSAndroid Build Coastguard Worker bool mSupportsSecureWithNonSecureCodec; 68*ec779b8eSAndroid Build Coastguard Worker std::shared_ptr<ResourceTracker> mResourceTracker; 69*ec779b8eSAndroid Build Coastguard Worker }; 70*ec779b8eSAndroid Build Coastguard Worker 71*ec779b8eSAndroid Build Coastguard Worker } // namespace android 72*ec779b8eSAndroid Build Coastguard Worker 73*ec779b8eSAndroid Build Coastguard Worker #endif // ANDROID_MEDIA_DEFAULTRESOURCEMODEL_H_ 74