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 ×tamp, 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 ×tamp)
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