xref: /aosp_15_r20/hardware/interfaces/media/bufferpool/aidl/default/BufferPoolClient.h (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker  * Copyright (C) 2022 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker  *
4*4d7e907cSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker  *
8*4d7e907cSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker  *
10*4d7e907cSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker  * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker  */
16*4d7e907cSAndroid Build Coastguard Worker 
17*4d7e907cSAndroid Build Coastguard Worker #pragma once
18*4d7e907cSAndroid Build Coastguard Worker 
19*4d7e907cSAndroid Build Coastguard Worker #include <memory>
20*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/media/bufferpool2/IAccessor.h>
21*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/media/bufferpool2/IObserver.h>
22*4d7e907cSAndroid Build Coastguard Worker #include <bufferpool2/BufferPoolTypes.h>
23*4d7e907cSAndroid Build Coastguard Worker 
24*4d7e907cSAndroid Build Coastguard Worker namespace aidl::android::hardware::media::bufferpool2::implementation {
25*4d7e907cSAndroid Build Coastguard Worker 
26*4d7e907cSAndroid Build Coastguard Worker using aidl::android::hardware::media::bufferpool2::IAccessor;
27*4d7e907cSAndroid Build Coastguard Worker using aidl::android::hardware::media::bufferpool2::IObserver;
28*4d7e907cSAndroid Build Coastguard Worker 
29*4d7e907cSAndroid Build Coastguard Worker struct Accessor;
30*4d7e907cSAndroid Build Coastguard Worker 
31*4d7e907cSAndroid Build Coastguard Worker /**
32*4d7e907cSAndroid Build Coastguard Worker  * A buffer pool client for a buffer pool. For a specific buffer pool, at most
33*4d7e907cSAndroid Build Coastguard Worker  * one buffer pool client exists per process. This class will not be exposed
34*4d7e907cSAndroid Build Coastguard Worker  * outside. A buffer pool client will be used via ClientManager.
35*4d7e907cSAndroid Build Coastguard Worker  */
36*4d7e907cSAndroid Build Coastguard Worker class BufferPoolClient {
37*4d7e907cSAndroid Build Coastguard Worker public:
38*4d7e907cSAndroid Build Coastguard Worker     /**
39*4d7e907cSAndroid Build Coastguard Worker      * Creates a buffer pool client from a local buffer pool
40*4d7e907cSAndroid Build Coastguard Worker      * (via ClientManager#create).
41*4d7e907cSAndroid Build Coastguard Worker      */
42*4d7e907cSAndroid Build Coastguard Worker     explicit BufferPoolClient(const std::shared_ptr<Accessor> &accessor,
43*4d7e907cSAndroid Build Coastguard Worker                               const std::shared_ptr<IObserver> &observer);
44*4d7e907cSAndroid Build Coastguard Worker 
45*4d7e907cSAndroid Build Coastguard Worker     /**
46*4d7e907cSAndroid Build Coastguard Worker      * Creates a buffer pool client from a remote buffer pool
47*4d7e907cSAndroid Build Coastguard Worker      * (via ClientManager#registerSender).
48*4d7e907cSAndroid Build Coastguard Worker      * Note: A buffer pool client created with remote buffer pool cannot
49*4d7e907cSAndroid Build Coastguard Worker      * allocate a buffer.
50*4d7e907cSAndroid Build Coastguard Worker      */
51*4d7e907cSAndroid Build Coastguard Worker     explicit BufferPoolClient(const std::shared_ptr<IAccessor> &accessor,
52*4d7e907cSAndroid Build Coastguard Worker                               const std::shared_ptr<IObserver> &observer);
53*4d7e907cSAndroid Build Coastguard Worker 
54*4d7e907cSAndroid Build Coastguard Worker     /** Destructs a buffer pool client. */
55*4d7e907cSAndroid Build Coastguard Worker     ~BufferPoolClient();
56*4d7e907cSAndroid Build Coastguard Worker 
57*4d7e907cSAndroid Build Coastguard Worker private:
58*4d7e907cSAndroid Build Coastguard Worker     bool isValid();
59*4d7e907cSAndroid Build Coastguard Worker 
60*4d7e907cSAndroid Build Coastguard Worker     bool isLocal();
61*4d7e907cSAndroid Build Coastguard Worker 
62*4d7e907cSAndroid Build Coastguard Worker     bool isActive(int64_t *lastTransactionMs, bool clearCache);
63*4d7e907cSAndroid Build Coastguard Worker 
64*4d7e907cSAndroid Build Coastguard Worker     ConnectionId getConnectionId();
65*4d7e907cSAndroid Build Coastguard Worker 
66*4d7e907cSAndroid Build Coastguard Worker     BufferPoolStatus getAccessor(std::shared_ptr<IAccessor> *accessor);
67*4d7e907cSAndroid Build Coastguard Worker 
68*4d7e907cSAndroid Build Coastguard Worker     void receiveInvalidation(uint32_t msgId);
69*4d7e907cSAndroid Build Coastguard Worker 
70*4d7e907cSAndroid Build Coastguard Worker     BufferPoolStatus flush();
71*4d7e907cSAndroid Build Coastguard Worker 
72*4d7e907cSAndroid Build Coastguard Worker     BufferPoolStatus allocate(const std::vector<uint8_t> &params,
73*4d7e907cSAndroid Build Coastguard Worker                           native_handle_t **handle,
74*4d7e907cSAndroid Build Coastguard Worker                           std::shared_ptr<BufferPoolData> *buffer);
75*4d7e907cSAndroid Build Coastguard Worker 
76*4d7e907cSAndroid Build Coastguard Worker     BufferPoolStatus receive(TransactionId transactionId,
77*4d7e907cSAndroid Build Coastguard Worker                          BufferId bufferId,
78*4d7e907cSAndroid Build Coastguard Worker                          int64_t timestampMs,
79*4d7e907cSAndroid Build Coastguard Worker                          native_handle_t **handle,
80*4d7e907cSAndroid Build Coastguard Worker                          std::shared_ptr<BufferPoolData> *buffer);
81*4d7e907cSAndroid Build Coastguard Worker 
82*4d7e907cSAndroid Build Coastguard Worker     BufferPoolStatus postSend(ConnectionId receiver,
83*4d7e907cSAndroid Build Coastguard Worker                           const std::shared_ptr<BufferPoolData> &buffer,
84*4d7e907cSAndroid Build Coastguard Worker                           TransactionId *transactionId,
85*4d7e907cSAndroid Build Coastguard Worker                           int64_t *timestampMs);
86*4d7e907cSAndroid Build Coastguard Worker 
87*4d7e907cSAndroid Build Coastguard Worker     class Impl;
88*4d7e907cSAndroid Build Coastguard Worker     std::shared_ptr<Impl> mImpl;
89*4d7e907cSAndroid Build Coastguard Worker 
90*4d7e907cSAndroid Build Coastguard Worker     friend struct ClientManager;
91*4d7e907cSAndroid Build Coastguard Worker     friend struct Observer;
92*4d7e907cSAndroid Build Coastguard Worker };
93*4d7e907cSAndroid Build Coastguard Worker 
94*4d7e907cSAndroid Build Coastguard Worker }  // namespace aidl::android::hardware::bufferpool2::implementation
95