xref: /aosp_15_r20/frameworks/av/services/mediaresourcemanager/DefaultResourceModel.h (revision ec779b8e0859a360c3d303172224686826e6e0e1)
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