1 /*
2  * Copyright (c) 2021 Huawei Device 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_queue_consumer.h"
17 
18 namespace OHOS {
BufferQueueConsumer(sptr<BufferQueue> & bufferQueue)19 BufferQueueConsumer::BufferQueueConsumer(sptr<BufferQueue>& bufferQueue)
20 {
21     bufferQueue_ = bufferQueue;
22     if (bufferQueue_ != nullptr) {
23         bufferQueue_->GetName(name_);
24     }
25 }
26 
~BufferQueueConsumer()27 BufferQueueConsumer::~BufferQueueConsumer()
28 {
29 }
30 
AcquireBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,int64_t & timestamp,std::vector<Rect> & damages)31 GSError BufferQueueConsumer::AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence,
32     int64_t &timestamp, std::vector<Rect> &damages)
33 {
34     if (bufferQueue_ == nullptr) {
35         return SURFACE_ERROR_UNKOWN;
36     }
37     return bufferQueue_->AcquireBuffer(buffer, fence, timestamp, damages);
38 }
39 
AcquireBuffer(IConsumerSurface::AcquireBufferReturnValue & returnValue,int64_t expectPresentTimestamp,bool isUsingAutoTimestamp)40 GSError BufferQueueConsumer::AcquireBuffer(IConsumerSurface::AcquireBufferReturnValue &returnValue,
41                                            int64_t expectPresentTimestamp, bool isUsingAutoTimestamp)
42 {
43     if (bufferQueue_ == nullptr) {
44         return SURFACE_ERROR_UNKOWN;
45     }
46     return bufferQueue_->AcquireBuffer(returnValue, expectPresentTimestamp, isUsingAutoTimestamp);
47 }
48 
ReleaseBuffer(sptr<SurfaceBuffer> & buffer,const sptr<SyncFence> & fence)49 GSError BufferQueueConsumer::ReleaseBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence)
50 {
51     if (bufferQueue_ == nullptr) {
52         return SURFACE_ERROR_UNKOWN;
53     }
54     return bufferQueue_->ReleaseBuffer(buffer, fence);
55 }
56 
AttachBufferToQueue(sptr<SurfaceBuffer> buffer)57 GSError BufferQueueConsumer::AttachBufferToQueue(sptr<SurfaceBuffer> buffer)
58 {
59     if (bufferQueue_ == nullptr) {
60         return SURFACE_ERROR_UNKOWN;
61     }
62     return bufferQueue_->AttachBufferToQueue(buffer, InvokerType::CONSUMER_INVOKER);
63 }
64 
DetachBufferFromQueue(sptr<SurfaceBuffer> buffer)65 GSError BufferQueueConsumer::DetachBufferFromQueue(sptr<SurfaceBuffer> buffer)
66 {
67     if (bufferQueue_ == nullptr) {
68         return SURFACE_ERROR_UNKOWN;
69     }
70     return bufferQueue_->DetachBufferFromQueue(buffer, InvokerType::CONSUMER_INVOKER);
71 }
72 
AttachBuffer(sptr<SurfaceBuffer> & buffer)73 GSError BufferQueueConsumer::AttachBuffer(sptr<SurfaceBuffer>& buffer)
74 {
75     return AttachBuffer(buffer, 0);
76 }
77 
AttachBuffer(sptr<SurfaceBuffer> & buffer,int32_t timeOut)78 GSError BufferQueueConsumer::AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut)
79 {
80     if (bufferQueue_ == nullptr) {
81         return GSERROR_INVALID_ARGUMENTS;
82     }
83     return bufferQueue_->AttachBuffer(buffer, timeOut);
84 }
85 
DetachBuffer(sptr<SurfaceBuffer> & buffer)86 GSError BufferQueueConsumer::DetachBuffer(sptr<SurfaceBuffer>& buffer)
87 {
88     if (bufferQueue_ == nullptr) {
89         return GSERROR_INVALID_ARGUMENTS;
90     }
91     return bufferQueue_->DetachBuffer(buffer);
92 }
93 
RegisterSurfaceDelegator(sptr<IRemoteObject> client,sptr<Surface> cSurface)94 GSError BufferQueueConsumer::RegisterSurfaceDelegator(sptr<IRemoteObject> client, sptr<Surface> cSurface)
95 {
96     if (bufferQueue_ == nullptr) {
97         return GSERROR_INVALID_ARGUMENTS;
98     }
99     return bufferQueue_->RegisterSurfaceDelegator(client, cSurface);
100 }
101 
QueryIfBufferAvailable()102 bool BufferQueueConsumer::QueryIfBufferAvailable()
103 {
104     if (bufferQueue_ == nullptr) {
105         return false;
106     }
107     return bufferQueue_->QueryIfBufferAvailable();
108 }
109 
RegisterConsumerListener(sptr<IBufferConsumerListener> & listener)110 GSError BufferQueueConsumer::RegisterConsumerListener(sptr<IBufferConsumerListener>& listener)
111 {
112     if (bufferQueue_ == nullptr) {
113         return GSERROR_INVALID_ARGUMENTS;
114     }
115     return bufferQueue_->RegisterConsumerListener(listener);
116 }
117 
RegisterConsumerListener(IBufferConsumerListenerClazz * listener)118 GSError BufferQueueConsumer::RegisterConsumerListener(IBufferConsumerListenerClazz *listener)
119 {
120     if (bufferQueue_ == nullptr) {
121         return GSERROR_INVALID_ARGUMENTS;
122     }
123     return bufferQueue_->RegisterConsumerListener(listener);
124 }
125 
RegisterReleaseListener(OnReleaseFunc func)126 GSError BufferQueueConsumer::RegisterReleaseListener(OnReleaseFunc func)
127 {
128     if (bufferQueue_ == nullptr) {
129         return GSERROR_INVALID_ARGUMENTS;
130     }
131     return bufferQueue_->RegisterReleaseListener(func);
132 }
133 
RegisterDeleteBufferListener(OnDeleteBufferFunc func,bool isForUniRedraw)134 GSError BufferQueueConsumer::RegisterDeleteBufferListener(OnDeleteBufferFunc func, bool isForUniRedraw)
135 {
136     if (bufferQueue_ == nullptr) {
137         return GSERROR_INVALID_ARGUMENTS;
138     }
139     return bufferQueue_->RegisterDeleteBufferListener(func, isForUniRedraw);
140 }
141 
UnregisterConsumerListener()142 GSError BufferQueueConsumer::UnregisterConsumerListener()
143 {
144     if (bufferQueue_ == nullptr) {
145         return GSERROR_INVALID_ARGUMENTS;
146     }
147     return bufferQueue_->UnregisterConsumerListener();
148 }
149 
SetDefaultWidthAndHeight(int32_t width,int32_t height)150 GSError BufferQueueConsumer::SetDefaultWidthAndHeight(int32_t width, int32_t height)
151 {
152     if (bufferQueue_ == nullptr) {
153         return GSERROR_INVALID_ARGUMENTS;
154     }
155     return bufferQueue_->SetDefaultWidthAndHeight(width, height);
156 }
157 
SetDefaultUsage(uint64_t usage)158 GSError BufferQueueConsumer::SetDefaultUsage(uint64_t usage)
159 {
160     if (bufferQueue_ == nullptr) {
161         return GSERROR_INVALID_ARGUMENTS;
162     }
163     return bufferQueue_->SetDefaultUsage(usage);
164 }
165 
Dump(std::string & result) const166 void BufferQueueConsumer::Dump(std::string &result) const
167 {
168     if (bufferQueue_ == nullptr) {
169         return;
170     }
171     return bufferQueue_->Dump(result);
172 }
173 
GetTransform() const174 GraphicTransformType BufferQueueConsumer::GetTransform() const
175 {
176     if (bufferQueue_ == nullptr) {
177         return GraphicTransformType::GRAPHIC_ROTATE_BUTT;
178     }
179     return bufferQueue_->GetTransform();
180 }
181 
GetScalingMode(uint32_t sequence,ScalingMode & scalingMode) const182 GSError BufferQueueConsumer::GetScalingMode(uint32_t sequence, ScalingMode &scalingMode) const
183 {
184     if (bufferQueue_ == nullptr) {
185         return GSERROR_INVALID_ARGUMENTS;
186     }
187     return bufferQueue_->GetScalingMode(sequence, scalingMode);
188 }
189 
QueryMetaDataType(uint32_t sequence,HDRMetaDataType & type) const190 GSError BufferQueueConsumer::QueryMetaDataType(uint32_t sequence, HDRMetaDataType &type) const
191 {
192     if (bufferQueue_ == nullptr) {
193         return GSERROR_INVALID_ARGUMENTS;
194     }
195     return bufferQueue_->QueryMetaDataType(sequence, type);
196 }
197 
GetMetaData(uint32_t sequence,std::vector<GraphicHDRMetaData> & metaData) const198 GSError BufferQueueConsumer::GetMetaData(uint32_t sequence, std::vector<GraphicHDRMetaData> &metaData) const
199 {
200     if (bufferQueue_ == nullptr) {
201         return GSERROR_INVALID_ARGUMENTS;
202     }
203     return bufferQueue_->GetMetaData(sequence, metaData);
204 }
205 
GetMetaDataSet(uint32_t sequence,GraphicHDRMetadataKey & key,std::vector<uint8_t> & metaData) const206 GSError BufferQueueConsumer::GetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey &key,
207                                             std::vector<uint8_t> &metaData) const
208 {
209     if (bufferQueue_ == nullptr) {
210         return GSERROR_INVALID_ARGUMENTS;
211     }
212     return bufferQueue_->GetMetaDataSet(sequence, key, metaData);
213 }
214 
GetTunnelHandle() const215 sptr<SurfaceTunnelHandle> BufferQueueConsumer::GetTunnelHandle() const
216 {
217     if (bufferQueue_ == nullptr) {
218         return nullptr;
219     }
220     return bufferQueue_->GetTunnelHandle();
221 }
222 
SetPresentTimestamp(uint32_t sequence,const GraphicPresentTimestamp & timestamp)223 GSError BufferQueueConsumer::SetPresentTimestamp(uint32_t sequence, const GraphicPresentTimestamp &timestamp)
224 {
225     if (bufferQueue_ == nullptr) {
226         return GSERROR_INVALID_ARGUMENTS;
227     }
228     return bufferQueue_->SetPresentTimestamp(sequence, timestamp);
229 }
230 
GetStatus() const231 bool BufferQueueConsumer::GetStatus() const
232 {
233     return bufferQueue_->GetStatus();
234 }
235 
SetStatus(bool status)236 void BufferQueueConsumer::SetStatus(bool status)
237 {
238     bufferQueue_->SetStatus(status);
239 }
240 
SetBufferHold(bool hold)241 void BufferQueueConsumer::SetBufferHold(bool hold)
242 {
243     if (bufferQueue_ == nullptr) {
244         return;
245     }
246     bufferQueue_->SetBufferHold(hold);
247 }
248 
OnConsumerDied()249 GSError BufferQueueConsumer::OnConsumerDied()
250 {
251     if (bufferQueue_ == nullptr) {
252         return GSERROR_INVALID_ARGUMENTS;
253     }
254     return bufferQueue_->OnConsumerDied();
255 }
256 
GoBackground()257 GSError BufferQueueConsumer::GoBackground()
258 {
259     if (bufferQueue_ == nullptr) {
260         return GSERROR_INVALID_ARGUMENTS;
261     }
262     return bufferQueue_->GoBackground();
263 }
264 
GetHdrWhitePointBrightness() const265 float BufferQueueConsumer::GetHdrWhitePointBrightness() const
266 {
267     if (bufferQueue_ == nullptr) {
268         return SURFACE_ERROR_UNKOWN;
269     }
270     return bufferQueue_->GetHdrWhitePointBrightness();
271 }
272 
GetSdrWhitePointBrightness() const273 float BufferQueueConsumer::GetSdrWhitePointBrightness() const
274 {
275     if (bufferQueue_ == nullptr) {
276         return SURFACE_ERROR_UNKOWN;
277     }
278     return bufferQueue_->GetSdrWhitePointBrightness();
279 }
280 
IsSurfaceBufferInCache(uint32_t seqNum,bool & isInCache)281 GSError BufferQueueConsumer::IsSurfaceBufferInCache(uint32_t seqNum, bool &isInCache)
282 {
283     if (bufferQueue_ == nullptr) {
284         return SURFACE_ERROR_UNKOWN;
285     }
286     return bufferQueue_->IsSurfaceBufferInCache(seqNum, isInCache);
287 }
288 
GetAvailableBufferCount() const289 uint32_t BufferQueueConsumer::GetAvailableBufferCount() const
290 {
291     if (bufferQueue_ == nullptr) {
292         return SURFACE_ERROR_UNKOWN;
293     }
294     return bufferQueue_->GetAvailableBufferCount();
295 }
296 } // namespace OHOS
297