1 /*
2 * Copyright (c) 2022 Shenzhen Kaihong DID Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "buffer_manager_wrapper.h"
17 #include "buffer_manager.h"
18 #include "hdf_log.h"
19
20 #ifdef __cplusplus
21 extern "C"
22 {
23 #endif
24
IsInputDataBufferReadyImpl(const struct BufferManagerWrapper * bufferManagerWrapper,uint32_t timeoutMs)25 static bool IsInputDataBufferReadyImpl(const struct BufferManagerWrapper *bufferManagerWrapper, uint32_t timeoutMs)
26 {
27 if (bufferManagerWrapper == nullptr || bufferManagerWrapper->inputBufferManager == nullptr) {
28 HDF_LOGE("%{public}s: invalid params!", __func__);
29 return false;
30 }
31
32 CodecBuffer *buffer =
33 (reinterpret_cast<BufferManager*>(bufferManagerWrapper->inputBufferManager))->GetBuffer(timeoutMs, true);
34 return (buffer != nullptr);
35 }
36
GetInputDataBufferImpl(const struct BufferManagerWrapper * bufferManagerWrapper,uint32_t timeoutMs)37 static CodecBuffer* GetInputDataBufferImpl(const struct BufferManagerWrapper *bufferManagerWrapper, uint32_t timeoutMs)
38 {
39 if (bufferManagerWrapper == nullptr || bufferManagerWrapper->inputBufferManager == nullptr) {
40 HDF_LOGE("%{public}s: invalid params!", __func__);
41 return nullptr;
42 }
43
44 CodecBuffer *buffer =
45 (reinterpret_cast<BufferManager*>(bufferManagerWrapper->inputBufferManager))->GetBuffer(timeoutMs, false);
46 return buffer;
47 }
48
GetUsedInputDataBufferImpl(const struct BufferManagerWrapper * bufferManagerWrapper,uint32_t timeoutMs)49 static CodecBuffer* GetUsedInputDataBufferImpl(const struct BufferManagerWrapper *bufferManagerWrapper,
50 uint32_t timeoutMs)
51 {
52 if (bufferManagerWrapper == nullptr || bufferManagerWrapper->inputBufferManager == nullptr) {
53 HDF_LOGE("%{public}s: invalid params!", __func__);
54 return nullptr;
55 }
56
57 CodecBuffer *buffer =
58 (reinterpret_cast<BufferManager*>(bufferManagerWrapper->inputBufferManager))->GetUsedBuffer(timeoutMs, false);
59 return buffer;
60 }
61
PutInputDataBufferImpl(const struct BufferManagerWrapper * bufferManagerWrapper,CodecBuffer * buffer)62 static void PutInputDataBufferImpl(const struct BufferManagerWrapper *bufferManagerWrapper, CodecBuffer *buffer)
63 {
64 if (bufferManagerWrapper == nullptr || bufferManagerWrapper->inputBufferManager == nullptr || buffer == nullptr) {
65 HDF_LOGE("%{public}s: invalid params!", __func__);
66 return;
67 }
68
69 (reinterpret_cast<BufferManager*>(bufferManagerWrapper->inputBufferManager))->PutBuffer(buffer);
70 }
71
PutUsedInputDataBufferImpl(const struct BufferManagerWrapper * bufferManagerWrapper,CodecBuffer * buffer)72 static void PutUsedInputDataBufferImpl(const struct BufferManagerWrapper *bufferManagerWrapper, CodecBuffer *buffer)
73 {
74 if (bufferManagerWrapper == nullptr || bufferManagerWrapper->inputBufferManager == nullptr || buffer == nullptr) {
75 HDF_LOGE("%{public}s: invalid params!", __func__);
76 return;
77 }
78 if (bufferManagerWrapper->inputBufferManager == nullptr) {
79 HDF_LOGE("%{public}s: invalid params!", __func__);
80 return;
81 }
82
83 (reinterpret_cast<BufferManager*>(bufferManagerWrapper->inputBufferManager))->PutUsedBuffer(buffer);
84 }
85
IsUsedOutputDataBufferReadyImpl(const struct BufferManagerWrapper * bufferManagerWrapper,uint32_t timeoutMs)86 static bool IsUsedOutputDataBufferReadyImpl(const struct BufferManagerWrapper *bufferManagerWrapper, uint32_t timeoutMs)
87 {
88 if (bufferManagerWrapper == nullptr || bufferManagerWrapper->outputBufferManager == nullptr) {
89 HDF_LOGE("%{public}s: invalid params!", __func__);
90 return false;
91 }
92
93 CodecBuffer *buffer =
94 (reinterpret_cast<BufferManager*>(bufferManagerWrapper->outputBufferManager))->GetUsedBuffer(timeoutMs, true);
95 return (buffer != nullptr);
96 }
97
GetOutputDataBufferImpl(const struct BufferManagerWrapper * bufferManagerWrapper,uint32_t timeoutMs)98 static CodecBuffer* GetOutputDataBufferImpl(const struct BufferManagerWrapper *bufferManagerWrapper, uint32_t timeoutMs)
99 {
100 if (bufferManagerWrapper == nullptr || bufferManagerWrapper->outputBufferManager == nullptr) {
101 HDF_LOGE("%{public}s: invalid params!", __func__);
102 return nullptr;
103 }
104
105 CodecBuffer *buffer =
106 (reinterpret_cast<BufferManager*>(bufferManagerWrapper->outputBufferManager))->GetBuffer(timeoutMs, false);
107 return buffer;
108 }
109
GetUsedOutputDataBufferImpl(const struct BufferManagerWrapper * bufferManagerWrapper,uint32_t timeoutMs)110 static CodecBuffer* GetUsedOutputDataBufferImpl(const struct BufferManagerWrapper *bufferManagerWrapper,
111 uint32_t timeoutMs)
112 {
113 if (bufferManagerWrapper == nullptr || bufferManagerWrapper->outputBufferManager == nullptr) {
114 HDF_LOGE("%{public}s: invalid params!", __func__);
115 return nullptr;
116 }
117
118 CodecBuffer *buffer =
119 (reinterpret_cast<BufferManager*>(bufferManagerWrapper->outputBufferManager))->GetUsedBuffer(timeoutMs, false);
120 return buffer;
121 }
122
PutOutputDataBufferImpl(const struct BufferManagerWrapper * bufferManagerWrapper,CodecBuffer * buffer)123 static void PutOutputDataBufferImpl(const struct BufferManagerWrapper *bufferManagerWrapper, CodecBuffer *buffer)
124 {
125 if (bufferManagerWrapper == nullptr || bufferManagerWrapper->outputBufferManager == nullptr || buffer == nullptr) {
126 HDF_LOGE("%{public}s: invalid params!", __func__);
127 return;
128 }
129
130 (reinterpret_cast<BufferManager*>(bufferManagerWrapper->outputBufferManager))->PutBuffer(buffer);
131 }
132
PutUsedOutputDataBufferImpl(const struct BufferManagerWrapper * bufferManagerWrapper,CodecBuffer * buffer)133 static void PutUsedOutputDataBufferImpl(const struct BufferManagerWrapper *bufferManagerWrapper, CodecBuffer *buffer)
134 {
135 if (bufferManagerWrapper == nullptr || bufferManagerWrapper->outputBufferManager == nullptr || buffer == nullptr) {
136 HDF_LOGE("%{public}s: invalid params!", __func__);
137 return;
138 }
139
140 (reinterpret_cast<BufferManager*>(bufferManagerWrapper->outputBufferManager))->PutUsedBuffer(buffer);
141 }
142
ConstructBufferManager(struct BufferManagerWrapper * bufferManager)143 static void ConstructBufferManager(struct BufferManagerWrapper *bufferManager)
144 {
145 if (bufferManager == nullptr) {
146 return;
147 }
148 bufferManager->IsInputDataBufferReady = IsInputDataBufferReadyImpl;
149 bufferManager->GetInputDataBuffer = GetInputDataBufferImpl;
150 bufferManager->GetUsedInputDataBuffer = GetUsedInputDataBufferImpl;
151 bufferManager->PutInputDataBuffer = PutInputDataBufferImpl;
152 bufferManager->PutUsedInputDataBuffer = PutUsedInputDataBufferImpl;
153 bufferManager->IsUsedOutputDataBufferReady = IsUsedOutputDataBufferReadyImpl;
154 bufferManager->GetOutputDataBuffer = GetOutputDataBufferImpl;
155 bufferManager->GetUsedOutputDataBuffer = GetUsedOutputDataBufferImpl;
156 bufferManager->PutOutputDataBuffer = PutOutputDataBufferImpl;
157 bufferManager->PutUsedOutputDataBuffer = PutUsedOutputDataBufferImpl;
158 }
159
GetBufferManager(void)160 struct BufferManagerWrapper* GetBufferManager(void)
161 {
162 struct BufferManagerWrapper *bufferManager = new struct BufferManagerWrapper;
163 if (bufferManager == nullptr) {
164 return nullptr;
165 }
166 bufferManager->inputBufferManager = new BufferManager();
167 bufferManager->outputBufferManager = new BufferManager();
168 ConstructBufferManager(bufferManager);
169 return bufferManager;
170 }
171
DeleteBufferManager(struct BufferManagerWrapper ** ppBufferManager)172 void DeleteBufferManager(struct BufferManagerWrapper **ppBufferManager)
173 {
174 if (ppBufferManager == nullptr || *ppBufferManager == nullptr) {
175 return;
176 }
177 delete reinterpret_cast<BufferManager*>((*ppBufferManager)->inputBufferManager);
178 delete reinterpret_cast<BufferManager*>((*ppBufferManager)->outputBufferManager);
179 delete *ppBufferManager;
180 }
181
182 #ifdef __cplusplus
183 }
184 #endif
185