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