• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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,bool isLppMode)31 GSError BufferQueueConsumer::AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence,
32     int64_t &timestamp, std::vector<Rect> &damages, bool isLppMode)
33 {
34     if (bufferQueue_ == nullptr) {
35         return SURFACE_ERROR_UNKOWN;
36     }
37     if (isLppMode) {
38         return bufferQueue_->AcquireLppBuffer(buffer, fence, timestamp, damages);
39     }
40     return bufferQueue_->AcquireBuffer(buffer, fence, timestamp, damages);
41 }
42 
AcquireBuffer(IConsumerSurface::AcquireBufferReturnValue & returnValue,int64_t expectPresentTimestamp,bool isUsingAutoTimestamp)43 GSError BufferQueueConsumer::AcquireBuffer(IConsumerSurface::AcquireBufferReturnValue &returnValue,
44                                            int64_t expectPresentTimestamp, bool isUsingAutoTimestamp)
45 {
46     if (bufferQueue_ == nullptr) {
47         return SURFACE_ERROR_UNKOWN;
48     }
49     return bufferQueue_->AcquireBuffer(returnValue, expectPresentTimestamp, isUsingAutoTimestamp);
50 }
51 
AcquireBuffer(IConsumerSurface::AcquireBufferReturnValue & returnValue)52 GSError BufferQueueConsumer::AcquireBuffer(IConsumerSurface::AcquireBufferReturnValue &returnValue)
53 {
54     if (bufferQueue_ == nullptr) {
55         return SURFACE_ERROR_UNKOWN;
56     }
57     return bufferQueue_->AcquireBuffer(returnValue);
58 }
59 
ReleaseBuffer(sptr<SurfaceBuffer> & buffer,const sptr<SyncFence> & fence)60 GSError BufferQueueConsumer::ReleaseBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence)
61 {
62     if (bufferQueue_ == nullptr) {
63         return SURFACE_ERROR_UNKOWN;
64     }
65     return bufferQueue_->ReleaseBuffer(buffer, fence);
66 }
67 
ReleaseBuffer(uint32_t sequence,const sptr<SyncFence> & fence)68 GSError BufferQueueConsumer::ReleaseBuffer(uint32_t sequence, const sptr<SyncFence>& fence)
69 {
70     if (bufferQueue_ == nullptr) {
71         return SURFACE_ERROR_UNKOWN;
72     }
73     return bufferQueue_->ReleaseBuffer(sequence, fence);
74 }
75 
SetIsActiveGame(bool isActiveGame)76 GSError BufferQueueConsumer::SetIsActiveGame(bool isActiveGame)
77 {
78     if (bufferQueue_ == nullptr) {
79         return SURFACE_ERROR_UNKOWN;
80     }
81     return bufferQueue_->SetIsActiveGame(isActiveGame);
82 }
AttachBufferToQueue(sptr<SurfaceBuffer> buffer)83 GSError BufferQueueConsumer::AttachBufferToQueue(sptr<SurfaceBuffer> buffer)
84 {
85     if (bufferQueue_ == nullptr) {
86         return SURFACE_ERROR_UNKOWN;
87     }
88     return bufferQueue_->AttachBufferToQueue(buffer, InvokerType::CONSUMER_INVOKER);
89 }
90 
DetachBufferFromQueue(sptr<SurfaceBuffer> buffer,bool isReserveSlot)91 GSError BufferQueueConsumer::DetachBufferFromQueue(sptr<SurfaceBuffer> buffer, bool isReserveSlot)
92 {
93     if (bufferQueue_ == nullptr) {
94         return SURFACE_ERROR_UNKOWN;
95     }
96     return bufferQueue_->DetachBufferFromQueue(buffer, InvokerType::CONSUMER_INVOKER, isReserveSlot);
97 }
98 
AttachBuffer(sptr<SurfaceBuffer> & buffer)99 GSError BufferQueueConsumer::AttachBuffer(sptr<SurfaceBuffer>& buffer)
100 {
101     return AttachBuffer(buffer, 0);
102 }
103 
AttachBuffer(sptr<SurfaceBuffer> & buffer,int32_t timeOut)104 GSError BufferQueueConsumer::AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut)
105 {
106     if (bufferQueue_ == nullptr) {
107         return GSERROR_INVALID_ARGUMENTS;
108     }
109     return bufferQueue_->AttachBuffer(buffer, timeOut);
110 }
111 
DetachBuffer(sptr<SurfaceBuffer> & buffer)112 GSError BufferQueueConsumer::DetachBuffer(sptr<SurfaceBuffer>& buffer)
113 {
114     if (bufferQueue_ == nullptr) {
115         return GSERROR_INVALID_ARGUMENTS;
116     }
117     return bufferQueue_->DetachBuffer(buffer);
118 }
119 
RegisterSurfaceDelegator(sptr<IRemoteObject> client,sptr<Surface> cSurface)120 GSError BufferQueueConsumer::RegisterSurfaceDelegator(sptr<IRemoteObject> client, sptr<Surface> cSurface)
121 {
122     if (bufferQueue_ == nullptr) {
123         return GSERROR_INVALID_ARGUMENTS;
124     }
125     return bufferQueue_->RegisterSurfaceDelegator(client, cSurface);
126 }
127 
QueryIfBufferAvailable()128 bool BufferQueueConsumer::QueryIfBufferAvailable()
129 {
130     if (bufferQueue_ == nullptr) {
131         return false;
132     }
133     return bufferQueue_->QueryIfBufferAvailable();
134 }
135 
RegisterConsumerListener(sptr<IBufferConsumerListener> & listener)136 GSError BufferQueueConsumer::RegisterConsumerListener(sptr<IBufferConsumerListener>& listener)
137 {
138     if (bufferQueue_ == nullptr) {
139         return GSERROR_INVALID_ARGUMENTS;
140     }
141     return bufferQueue_->RegisterConsumerListener(listener);
142 }
143 
RegisterConsumerListener(IBufferConsumerListenerClazz * listener)144 GSError BufferQueueConsumer::RegisterConsumerListener(IBufferConsumerListenerClazz *listener)
145 {
146     if (bufferQueue_ == nullptr) {
147         return GSERROR_INVALID_ARGUMENTS;
148     }
149     return bufferQueue_->RegisterConsumerListener(listener);
150 }
151 
RegisterReleaseListener(OnReleaseFunc func)152 GSError BufferQueueConsumer::RegisterReleaseListener(OnReleaseFunc func)
153 {
154     if (bufferQueue_ == nullptr) {
155         return GSERROR_INVALID_ARGUMENTS;
156     }
157     return bufferQueue_->RegisterReleaseListener(func);
158 }
159 
RegisterDeleteBufferListener(OnDeleteBufferFunc func,bool isForUniRedraw)160 GSError BufferQueueConsumer::RegisterDeleteBufferListener(OnDeleteBufferFunc func, bool isForUniRedraw)
161 {
162     if (bufferQueue_ == nullptr) {
163         return GSERROR_INVALID_ARGUMENTS;
164     }
165     return bufferQueue_->RegisterDeleteBufferListener(func, isForUniRedraw);
166 }
167 
UnregisterConsumerListener()168 GSError BufferQueueConsumer::UnregisterConsumerListener()
169 {
170     if (bufferQueue_ == nullptr) {
171         return GSERROR_INVALID_ARGUMENTS;
172     }
173     return bufferQueue_->UnregisterConsumerListener();
174 }
175 
SetDefaultWidthAndHeight(int32_t width,int32_t height)176 GSError BufferQueueConsumer::SetDefaultWidthAndHeight(int32_t width, int32_t height)
177 {
178     if (bufferQueue_ == nullptr) {
179         return GSERROR_INVALID_ARGUMENTS;
180     }
181     return bufferQueue_->SetDefaultWidthAndHeight(width, height);
182 }
183 
SetDefaultUsage(uint64_t usage)184 GSError BufferQueueConsumer::SetDefaultUsage(uint64_t usage)
185 {
186     if (bufferQueue_ == nullptr) {
187         return GSERROR_INVALID_ARGUMENTS;
188     }
189     return bufferQueue_->SetDefaultUsage(usage);
190 }
191 
Dump(std::string & result) const192 void BufferQueueConsumer::Dump(std::string &result) const
193 {
194     if (bufferQueue_ == nullptr) {
195         return;
196     }
197     return bufferQueue_->Dump(result);
198 }
199 
DumpCurrentFrameLayer() const200 void BufferQueueConsumer::DumpCurrentFrameLayer() const
201 {
202     if (bufferQueue_ == nullptr) {
203         return;
204     }
205     return bufferQueue_->DumpCurrentFrameLayer();
206 }
207 
GetTransform() const208 GraphicTransformType BufferQueueConsumer::GetTransform() const
209 {
210     if (bufferQueue_ == nullptr) {
211         return GraphicTransformType::GRAPHIC_ROTATE_BUTT;
212     }
213     return bufferQueue_->GetTransform();
214 }
215 
GetScalingMode(uint32_t sequence,ScalingMode & scalingMode) const216 GSError BufferQueueConsumer::GetScalingMode(uint32_t sequence, ScalingMode &scalingMode) const
217 {
218     if (bufferQueue_ == nullptr) {
219         return GSERROR_INVALID_ARGUMENTS;
220     }
221     return bufferQueue_->GetScalingMode(sequence, scalingMode);
222 }
223 
QueryMetaDataType(uint32_t sequence,HDRMetaDataType & type) const224 GSError BufferQueueConsumer::QueryMetaDataType(uint32_t sequence, HDRMetaDataType &type) const
225 {
226     if (bufferQueue_ == nullptr) {
227         return GSERROR_INVALID_ARGUMENTS;
228     }
229     return bufferQueue_->QueryMetaDataType(sequence, type);
230 }
231 
GetMetaData(uint32_t sequence,std::vector<GraphicHDRMetaData> & metaData) const232 GSError BufferQueueConsumer::GetMetaData(uint32_t sequence, std::vector<GraphicHDRMetaData> &metaData) const
233 {
234     if (bufferQueue_ == nullptr) {
235         return GSERROR_INVALID_ARGUMENTS;
236     }
237     return bufferQueue_->GetMetaData(sequence, metaData);
238 }
239 
GetMetaDataSet(uint32_t sequence,GraphicHDRMetadataKey & key,std::vector<uint8_t> & metaData) const240 GSError BufferQueueConsumer::GetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey &key,
241                                             std::vector<uint8_t> &metaData) const
242 {
243     if (bufferQueue_ == nullptr) {
244         return GSERROR_INVALID_ARGUMENTS;
245     }
246     return bufferQueue_->GetMetaDataSet(sequence, key, metaData);
247 }
248 
GetTunnelHandle() const249 sptr<SurfaceTunnelHandle> BufferQueueConsumer::GetTunnelHandle() const
250 {
251     if (bufferQueue_ == nullptr) {
252         return nullptr;
253     }
254     return bufferQueue_->GetTunnelHandle();
255 }
256 
SetPresentTimestamp(uint32_t sequence,const GraphicPresentTimestamp & timestamp)257 GSError BufferQueueConsumer::SetPresentTimestamp(uint32_t sequence, const GraphicPresentTimestamp &timestamp)
258 {
259     if (bufferQueue_ == nullptr) {
260         return GSERROR_INVALID_ARGUMENTS;
261     }
262     return bufferQueue_->SetPresentTimestamp(sequence, timestamp);
263 }
264 
GetStatus() const265 bool BufferQueueConsumer::GetStatus() const
266 {
267     if (bufferQueue_ == nullptr) {
268         return false;
269     }
270     return bufferQueue_->GetStatus();
271 }
272 
SetStatus(bool status)273 void BufferQueueConsumer::SetStatus(bool status)
274 {
275     if (bufferQueue_ == nullptr) {
276         return;
277     }
278     bufferQueue_->SetStatus(status);
279 }
280 
SetBufferHold(bool hold)281 void BufferQueueConsumer::SetBufferHold(bool hold)
282 {
283     if (bufferQueue_ == nullptr) {
284         return;
285     }
286     bufferQueue_->SetBufferHold(hold);
287 }
288 
OnConsumerDied()289 GSError BufferQueueConsumer::OnConsumerDied()
290 {
291     if (bufferQueue_ == nullptr) {
292         return GSERROR_INVALID_ARGUMENTS;
293     }
294     return bufferQueue_->OnConsumerDied();
295 }
296 
GoBackground()297 GSError BufferQueueConsumer::GoBackground()
298 {
299     if (bufferQueue_ == nullptr) {
300         return GSERROR_INVALID_ARGUMENTS;
301     }
302     return bufferQueue_->GoBackground();
303 }
304 
GetHdrWhitePointBrightness() const305 float BufferQueueConsumer::GetHdrWhitePointBrightness() const
306 {
307     if (bufferQueue_ == nullptr) {
308         return SURFACE_ERROR_UNKOWN;
309     }
310     return bufferQueue_->GetHdrWhitePointBrightness();
311 }
312 
GetSdrWhitePointBrightness() const313 float BufferQueueConsumer::GetSdrWhitePointBrightness() const
314 {
315     if (bufferQueue_ == nullptr) {
316         return SURFACE_ERROR_UNKOWN;
317     }
318     return bufferQueue_->GetSdrWhitePointBrightness();
319 }
320 
IsSurfaceBufferInCache(uint32_t seqNum,bool & isInCache)321 GSError BufferQueueConsumer::IsSurfaceBufferInCache(uint32_t seqNum, bool &isInCache)
322 {
323     if (bufferQueue_ == nullptr) {
324         return SURFACE_ERROR_UNKOWN;
325     }
326     return bufferQueue_->IsSurfaceBufferInCache(seqNum, isInCache);
327 }
328 
GetGlobalAlpha(int32_t & alpha)329 GSError BufferQueueConsumer::GetGlobalAlpha(int32_t &alpha)
330 {
331     if (bufferQueue_ == nullptr) {
332         return SURFACE_ERROR_UNKOWN;
333     }
334     return bufferQueue_->GetGlobalAlpha(alpha);
335 }
GetAvailableBufferCount() const336 uint32_t BufferQueueConsumer::GetAvailableBufferCount() const
337 {
338     if (bufferQueue_ == nullptr) {
339         return SURFACE_ERROR_UNKOWN;
340     }
341     return bufferQueue_->GetAvailableBufferCount();
342 }
343 
GetLastFlushedDesiredPresentTimeStamp(int64_t & lastFlushedDesiredPresentTimeStamp) const344 GSError BufferQueueConsumer::GetLastFlushedDesiredPresentTimeStamp(int64_t &lastFlushedDesiredPresentTimeStamp) const
345 {
346     if (bufferQueue_ == nullptr) {
347         return SURFACE_ERROR_UNKOWN;
348     }
349     return bufferQueue_->GetLastFlushedDesiredPresentTimeStamp(lastFlushedDesiredPresentTimeStamp);
350 }
351 
GetFrontDesiredPresentTimeStamp(int64_t & desiredPresentTimeStamp,bool & isAutoTimeStamp) const352 GSError BufferQueueConsumer::GetFrontDesiredPresentTimeStamp(
353     int64_t &desiredPresentTimeStamp, bool &isAutoTimeStamp) const
354 {
355     if (bufferQueue_ == nullptr) {
356         return SURFACE_ERROR_UNKOWN;
357     }
358     return bufferQueue_->GetFrontDesiredPresentTimeStamp(desiredPresentTimeStamp, isAutoTimeStamp);
359 }
360 
GetBufferSupportFastCompose(bool & bufferSupportFastCompose) const361 GSError BufferQueueConsumer::GetBufferSupportFastCompose(bool &bufferSupportFastCompose) const
362 {
363     if (bufferQueue_ == nullptr) {
364         return SURFACE_ERROR_UNKOWN;
365     }
366     return bufferQueue_->GetBufferSupportFastCompose(bufferSupportFastCompose);
367 }
368 
GetBufferCacheConfig(const sptr<SurfaceBuffer> & buffer,BufferRequestConfig & config)369 GSError BufferQueueConsumer::GetBufferCacheConfig(const sptr<SurfaceBuffer>& buffer, BufferRequestConfig& config)
370 {
371     if (bufferQueue_ == nullptr) {
372         return SURFACE_ERROR_UNKOWN;
373     }
374     return bufferQueue_->GetBufferCacheConfig(buffer, config);
375 }
376 
GetCycleBuffersNumber(uint32_t & cycleBuffersNumber)377 GSError BufferQueueConsumer::GetCycleBuffersNumber(uint32_t& cycleBuffersNumber)
378 {
379     if (bufferQueue_ == nullptr) {
380         return SURFACE_ERROR_UNKOWN;
381     }
382     return bufferQueue_->GetCycleBuffersNumber(cycleBuffersNumber);
383 }
384 
GetFrameGravity(int32_t & frameGravity)385 GSError BufferQueueConsumer::GetFrameGravity(int32_t &frameGravity)
386 {
387     if (bufferQueue_ == nullptr) {
388         return SURFACE_ERROR_UNKOWN;
389     }
390     return bufferQueue_->GetFrameGravity(frameGravity);
391 }
392 
GetFixedRotation(int32_t & fixedRotation)393 GSError BufferQueueConsumer::GetFixedRotation(int32_t &fixedRotation)
394 {
395     if (bufferQueue_ == nullptr) {
396         return SURFACE_ERROR_UNKOWN;
397     }
398     return bufferQueue_->GetFixedRotation(fixedRotation);
399 }
400 
GetLastConsumeTime(int64_t & lastConsumeTime) const401 GSError BufferQueueConsumer::GetLastConsumeTime(int64_t &lastConsumeTime) const
402 {
403     if (bufferQueue_ == nullptr) {
404         return SURFACE_ERROR_UNKOWN;
405     }
406     return bufferQueue_->GetLastConsumeTime(lastConsumeTime);
407 }
408 
SetMaxQueueSize(uint32_t queueSize)409 GSError BufferQueueConsumer::SetMaxQueueSize(uint32_t queueSize)
410 {
411     if (bufferQueue_ == nullptr) {
412         return SURFACE_ERROR_UNKOWN;
413     }
414     return bufferQueue_->SetMaxQueueSize(queueSize);
415 }
GetMaxQueueSize(uint32_t & queueSize) const416 GSError BufferQueueConsumer::GetMaxQueueSize(uint32_t &queueSize) const
417 {
418     if (bufferQueue_ == nullptr) {
419         return SURFACE_ERROR_UNKOWN;
420     }
421     return bufferQueue_->GetMaxQueueSize(queueSize);
422 }
SetLppDrawSource(bool isShbSource,bool isRsSource)423 GSError BufferQueueConsumer::SetLppDrawSource(bool isShbSource, bool isRsSource)
424 {
425     if (bufferQueue_ == nullptr) {
426         return SURFACE_ERROR_UNKOWN;
427     }
428     return bufferQueue_->SetLppDrawSource(isShbSource, isRsSource);
429 }
430 
GetAlphaType(GraphicAlphaType & alphaType)431 GSError BufferQueueConsumer::GetAlphaType(GraphicAlphaType &alphaType)
432 {
433     if (bufferQueue_ == nullptr) {
434         return SURFACE_ERROR_UNKOWN;
435     }
436     return bufferQueue_->GetAlphaType(alphaType);
437 }
438 
SetIsPriorityAlloc(bool isPriorityAlloc)439 GSError BufferQueueConsumer::SetIsPriorityAlloc(bool isPriorityAlloc)
440 {
441     if (bufferQueue_ == nullptr) {
442         return SURFACE_ERROR_UNKOWN;
443     }
444     return bufferQueue_->SetIsPriorityAlloc(isPriorityAlloc);
445 }
446 } // namespace OHOS
447