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) {
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) {
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) {
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 || 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 || buffer == nullptr) {
75 HDF_LOGE("%{public}s: invalid params!", __func__);
76 return;
77 }
78
79 (reinterpret_cast<BufferManager*>(bufferManagerWrapper->inputBufferManager))->PutUsedBuffer(buffer);
80 }
81
IsUsedOutputDataBufferReadyImpl(const struct BufferManagerWrapper * bufferManagerWrapper,uint32_t timeoutMs)82 static bool IsUsedOutputDataBufferReadyImpl(const struct BufferManagerWrapper *bufferManagerWrapper, uint32_t timeoutMs)
83 {
84 if (bufferManagerWrapper == nullptr) {
85 HDF_LOGE("%{public}s: invalid params!", __func__);
86 return false;
87 }
88
89 CodecBuffer *buffer =
90 (reinterpret_cast<BufferManager*>(bufferManagerWrapper->outputBufferManager))->GetUsedBuffer(timeoutMs, true);
91 return (buffer != nullptr);
92 }
93
GetOutputDataBufferImpl(const struct BufferManagerWrapper * bufferManagerWrapper,uint32_t timeoutMs)94 static CodecBuffer* GetOutputDataBufferImpl(const struct BufferManagerWrapper *bufferManagerWrapper, uint32_t timeoutMs)
95 {
96 if (bufferManagerWrapper == nullptr) {
97 HDF_LOGE("%{public}s: invalid params!", __func__);
98 return nullptr;
99 }
100
101 CodecBuffer *buffer =
102 (reinterpret_cast<BufferManager*>(bufferManagerWrapper->outputBufferManager))->GetBuffer(timeoutMs, false);
103 return buffer;
104 }
105
GetUsedOutputDataBufferImpl(const struct BufferManagerWrapper * bufferManagerWrapper,uint32_t timeoutMs)106 static CodecBuffer* GetUsedOutputDataBufferImpl(const struct BufferManagerWrapper *bufferManagerWrapper,
107 uint32_t timeoutMs)
108 {
109 if (bufferManagerWrapper == nullptr) {
110 HDF_LOGE("%{public}s: invalid params!", __func__);
111 return nullptr;
112 }
113
114 CodecBuffer *buffer =
115 (reinterpret_cast<BufferManager*>(bufferManagerWrapper->outputBufferManager))->GetUsedBuffer(timeoutMs, false);
116 return buffer;
117 }
118
PutOutputDataBufferImpl(const struct BufferManagerWrapper * bufferManagerWrapper,CodecBuffer * buffer)119 static void PutOutputDataBufferImpl(const struct BufferManagerWrapper *bufferManagerWrapper, CodecBuffer *buffer)
120 {
121 if (bufferManagerWrapper == nullptr || buffer == nullptr) {
122 HDF_LOGE("%{public}s: invalid params!", __func__);
123 return;
124 }
125
126 (reinterpret_cast<BufferManager*>(bufferManagerWrapper->outputBufferManager))->PutBuffer(buffer);
127 }
128
PutUsedOutputDataBufferImpl(const struct BufferManagerWrapper * bufferManagerWrapper,CodecBuffer * buffer)129 static void PutUsedOutputDataBufferImpl(const struct BufferManagerWrapper *bufferManagerWrapper, CodecBuffer *buffer)
130 {
131 if (bufferManagerWrapper == nullptr || buffer == nullptr) {
132 HDF_LOGE("%{public}s: invalid params!", __func__);
133 return;
134 }
135
136 (reinterpret_cast<BufferManager*>(bufferManagerWrapper->outputBufferManager))->PutUsedBuffer(buffer);
137 }
138
ConstructBufferManager(struct BufferManagerWrapper * bufferManager)139 static void ConstructBufferManager(struct BufferManagerWrapper *bufferManager)
140 {
141 bufferManager->IsInputDataBufferReady = IsInputDataBufferReadyImpl;
142 bufferManager->GetInputDataBuffer = GetInputDataBufferImpl;
143 bufferManager->GetUsedInputDataBuffer = GetUsedInputDataBufferImpl;
144 bufferManager->PutInputDataBuffer = PutInputDataBufferImpl;
145 bufferManager->PutUsedInputDataBuffer = PutUsedInputDataBufferImpl;
146 bufferManager->IsUsedOutputDataBufferReady = IsUsedOutputDataBufferReadyImpl;
147 bufferManager->GetOutputDataBuffer = GetOutputDataBufferImpl;
148 bufferManager->GetUsedOutputDataBuffer = GetUsedOutputDataBufferImpl;
149 bufferManager->PutOutputDataBuffer = PutOutputDataBufferImpl;
150 bufferManager->PutUsedOutputDataBuffer = PutUsedOutputDataBufferImpl;
151 }
152
GetBufferManager(void)153 struct BufferManagerWrapper* GetBufferManager(void)
154 {
155 struct BufferManagerWrapper *bufferManager = new struct BufferManagerWrapper;
156 bufferManager->inputBufferManager = new BufferManager();
157 bufferManager->outputBufferManager = new BufferManager();
158 ConstructBufferManager(bufferManager);
159 return bufferManager;
160 }
161
DeleteBufferManager(struct BufferManagerWrapper ** ppBufferManager)162 void DeleteBufferManager(struct BufferManagerWrapper **ppBufferManager)
163 {
164 delete reinterpret_cast<BufferManager*>((*ppBufferManager)->inputBufferManager);
165 delete reinterpret_cast<BufferManager*>((*ppBufferManager)->outputBufferManager);
166 delete *ppBufferManager;
167 }
168
169 #ifdef __cplusplus
170 }
171 #endif
172