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 "consumer_surface.h"
17
18 #include <cinttypes>
19
20 #include "buffer_log.h"
21 #include "buffer_queue_producer.h"
22 #include "sync_fence.h"
23
24 namespace OHOS {
CreateSurfaceAsConsumer(std::string name, bool isShared)25 sptr<Surface> Surface::CreateSurfaceAsConsumer(std::string name, bool isShared)
26 {
27 sptr<ConsumerSurface> surf = new ConsumerSurface(name, isShared);
28 if (surf->Init() != GSERROR_OK) {
29 BLOGE("consumer surf init failed");
30 return nullptr;
31 }
32 return surf;
33 }
34
Create(std::string name, bool isShared)35 sptr<IConsumerSurface> IConsumerSurface::Create(std::string name, bool isShared)
36 {
37 sptr<ConsumerSurface> surf = new ConsumerSurface(name, isShared);
38 if (surf->Init() != GSERROR_OK) {
39 BLOGE("consumer surf init failed");
40 return nullptr;
41 }
42 return surf;
43 }
44
ConsumerSurface(const std::string& name, bool isShared)45 ConsumerSurface::ConsumerSurface(const std::string& name, bool isShared)
46 : name_(name), isShared_(isShared)
47 {
48 consumer_ = nullptr;
49 producer_ = nullptr;
50 }
51
~ConsumerSurface()52 ConsumerSurface::~ConsumerSurface()
53 {
54 if (consumer_ != nullptr) {
55 consumer_->OnConsumerDied();
56 consumer_->SetStatus(false);
57 }
58 if (producer_ != nullptr) {
59 BLOGI("~ConsumerSurface, producer_ sptrCnt: %{public}d, uniqueId: %{public}" PRIu64 ".",
60 producer_->GetSptrRefCount(), uniqueId_);
61 }
62 consumer_ = nullptr;
63 producer_ = nullptr;
64 }
65
Init()66 GSError ConsumerSurface::Init()
67 {
68 sptr<BufferQueue> queue_ = new BufferQueue(name_, isShared_);
69 producer_ = new BufferQueueProducer(queue_);
70 consumer_ = new BufferQueueConsumer(queue_);
71 uniqueId_ = GetUniqueId();
72 BLOGD("ConsumerSurface Init, uniqueId: %{public}" PRIu64 ".", uniqueId_);
73 return GSERROR_OK;
74 }
75
IsConsumer() const76 bool ConsumerSurface::IsConsumer() const
77 {
78 return true;
79 }
80
GetProducer() const81 sptr<IBufferProducer> ConsumerSurface::GetProducer() const
82 {
83 return producer_;
84 }
85
GetProducerInitInfo(ProducerInitInfo& info)86 GSError ConsumerSurface::GetProducerInitInfo(ProducerInitInfo& info)
87 {
88 return GSERROR_NOT_SUPPORT;
89 }
90
AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence, int64_t& timestamp, Rect& damage)91 GSError ConsumerSurface::AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence,
92 int64_t& timestamp, Rect& damage)
93 {
94 std::vector<Rect> damages;
95 GSError ret = AcquireBuffer(buffer, fence, timestamp, damages);
96 if (ret != GSERROR_OK) {
97 return ret;
98 }
99 if (damages.size() == 1) {
100 damage = damages[0];
101 return GSERROR_OK;
102 }
103 BLOGE("damages is %{public}zu, uniqueId: %{public}" PRIu64 ".", damages.size(), uniqueId_);
104 return GSERROR_INVALID_ARGUMENTS;
105 }
106
AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence, int64_t& timestamp, std::vector<Rect>& damages)107 GSError ConsumerSurface::AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence,
108 int64_t& timestamp, std::vector<Rect>& damages)
109 {
110 if (consumer_ == nullptr) {
111 return GSERROR_INVALID_ARGUMENTS;
112 }
113 return consumer_->AcquireBuffer(buffer, fence, timestamp, damages);
114 }
115
AcquireBuffer(AcquireBufferReturnValue &returnValue, int64_t expectPresentTimestamp, bool isUsingAutoTimestamp)116 GSError ConsumerSurface::AcquireBuffer(AcquireBufferReturnValue &returnValue, int64_t expectPresentTimestamp,
117 bool isUsingAutoTimestamp)
118 {
119 if (consumer_ == nullptr) {
120 return GSERROR_INVALID_ARGUMENTS;
121 }
122 return consumer_->AcquireBuffer(returnValue, expectPresentTimestamp, isUsingAutoTimestamp);
123 }
124
ReleaseBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence)125 GSError ConsumerSurface::ReleaseBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence)
126 {
127 if (buffer == nullptr || consumer_ == nullptr) {
128 return GSERROR_INVALID_ARGUMENTS;
129 }
130 return consumer_->ReleaseBuffer(buffer, fence);
131 }
132
AcquireBuffer(sptr<SurfaceBuffer>& buffer, int32_t& fence, int64_t& timestamp, Rect& damage)133 GSError ConsumerSurface::AcquireBuffer(sptr<SurfaceBuffer>& buffer, int32_t& fence,
134 int64_t& timestamp, Rect& damage)
135 {
136 sptr<SyncFence> syncFence = SyncFence::InvalidFence();
137 auto ret = AcquireBuffer(buffer, syncFence, timestamp, damage);
138 if (ret != GSERROR_OK) {
139 fence = -1;
140 return ret;
141 }
142 fence = syncFence->Dup();
143 return GSERROR_OK;
144 }
145
ReleaseBuffer(sptr<SurfaceBuffer>& buffer, int32_t fence)146 GSError ConsumerSurface::ReleaseBuffer(sptr<SurfaceBuffer>& buffer, int32_t fence)
147 {
148 sptr<SyncFence> syncFence = new SyncFence(fence);
149 return ReleaseBuffer(buffer, syncFence);
150 }
151
AttachBufferToQueue(sptr<SurfaceBuffer> buffer)152 GSError ConsumerSurface::AttachBufferToQueue(sptr<SurfaceBuffer> buffer)
153 {
154 if (buffer == nullptr || consumer_ == nullptr) {
155 return GSERROR_INVALID_ARGUMENTS;
156 }
157 buffer->SetConsumerAttachBufferFlag(true);
158 return consumer_->AttachBufferToQueue(buffer);
159 }
160
DetachBufferFromQueue(sptr<SurfaceBuffer> buffer)161 GSError ConsumerSurface::DetachBufferFromQueue(sptr<SurfaceBuffer> buffer)
162 {
163 if (buffer == nullptr || consumer_ == nullptr) {
164 return GSERROR_INVALID_ARGUMENTS;
165 }
166 buffer->SetConsumerAttachBufferFlag(false);
167 return consumer_->DetachBufferFromQueue(buffer);
168 }
169
AttachBuffer(sptr<SurfaceBuffer>& buffer)170 GSError ConsumerSurface::AttachBuffer(sptr<SurfaceBuffer>& buffer)
171 {
172 if (buffer == nullptr || consumer_ == nullptr) {
173 return GSERROR_INVALID_ARGUMENTS;
174 }
175 return consumer_->AttachBuffer(buffer);
176 }
177
AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut)178 GSError ConsumerSurface::AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut)
179 {
180 if (buffer == nullptr || consumer_ == nullptr) {
181 return GSERROR_INVALID_ARGUMENTS;
182 }
183 return consumer_->AttachBuffer(buffer, timeOut);
184 }
185
DetachBuffer(sptr<SurfaceBuffer>& buffer)186 GSError ConsumerSurface::DetachBuffer(sptr<SurfaceBuffer>& buffer)
187 {
188 if (buffer == nullptr || consumer_ == nullptr) {
189 return GSERROR_INVALID_ARGUMENTS;
190 }
191 return consumer_->DetachBuffer(buffer);
192 }
193
RegisterSurfaceDelegator(sptr<IRemoteObject> client)194 GSError ConsumerSurface::RegisterSurfaceDelegator(sptr<IRemoteObject> client)
195 {
196 if (client == nullptr || consumer_ == nullptr) {
197 return GSERROR_INVALID_ARGUMENTS;
198 }
199 return consumer_->RegisterSurfaceDelegator(client, this);
200 }
201
QueryIfBufferAvailable()202 bool ConsumerSurface::QueryIfBufferAvailable()
203 {
204 if (consumer_ == nullptr) {
205 return false;
206 }
207 return consumer_->QueryIfBufferAvailable();
208 }
209
GetQueueSize()210 uint32_t ConsumerSurface::GetQueueSize()
211 {
212 if (producer_ == nullptr) {
213 return 0;
214 }
215 return producer_->GetQueueSize();
216 }
217
SetQueueSize(uint32_t queueSize)218 GSError ConsumerSurface::SetQueueSize(uint32_t queueSize)
219 {
220 if (producer_ == nullptr) {
221 return GSERROR_INVALID_ARGUMENTS;
222 }
223 return producer_->SetQueueSize(queueSize);
224 }
225
GetName()226 const std::string& ConsumerSurface::GetName()
227 {
228 return name_;
229 }
230
SetDefaultWidthAndHeight(int32_t width, int32_t height)231 GSError ConsumerSurface::SetDefaultWidthAndHeight(int32_t width, int32_t height)
232 {
233 if (consumer_ == nullptr) {
234 return GSERROR_INVALID_ARGUMENTS;
235 }
236 return consumer_->SetDefaultWidthAndHeight(width, height);
237 }
238
GetDefaultWidth()239 int32_t ConsumerSurface::GetDefaultWidth()
240 {
241 if (producer_ == nullptr) {
242 return -1;
243 }
244 return producer_->GetDefaultWidth();
245 }
246
GetDefaultHeight()247 int32_t ConsumerSurface::GetDefaultHeight()
248 {
249 if (producer_ == nullptr) {
250 return -1;
251 }
252 return producer_->GetDefaultHeight();
253 }
254
SetDefaultUsage(uint64_t usage)255 GSError ConsumerSurface::SetDefaultUsage(uint64_t usage)
256 {
257 if (consumer_ == nullptr) {
258 return GSERROR_INVALID_ARGUMENTS;
259 }
260 return consumer_->SetDefaultUsage(usage);
261 }
262
GetDefaultUsage()263 uint64_t ConsumerSurface::GetDefaultUsage()
264 {
265 if (producer_ == nullptr) {
266 return 0;
267 }
268 return producer_->GetDefaultUsage();
269 }
270
SetUserData(const std::string& key, const std::string& val)271 GSError ConsumerSurface::SetUserData(const std::string& key, const std::string& val)
272 {
273 std::lock_guard<std::mutex> lockGuard(lockMutex_);
274 if (userData_.size() >= SURFACE_MAX_USER_DATA_COUNT) {
275 BLOGE("userData_ size(%{public}zu) out, uniqueId: %{public}" PRIu64 ".", userData_.size(), uniqueId_);
276 return GSERROR_OUT_OF_RANGE;
277 }
278
279 auto iterUserData = userData_.find(key);
280 if (iterUserData != userData_.end() && iterUserData->second == val) {
281 BLOGE("not find key:%{public}s, val:%{public}s exist, uniqueId: %{public}" PRIu64 ".",
282 key.c_str(), val.c_str(), uniqueId_);
283 return GSERROR_API_FAILED;
284 }
285
286 userData_[key] = val;
287 auto iter = onUserDataChange_.begin();
288 while (iter != onUserDataChange_.end()) {
289 if (iter->second != nullptr) {
290 iter->second(key, val);
291 }
292 iter++;
293 }
294
295 return GSERROR_OK;
296 }
297
GetUserData(const std::string& key)298 std::string ConsumerSurface::GetUserData(const std::string& key)
299 {
300 std::lock_guard<std::mutex> lockGuard(lockMutex_);
301 if (userData_.find(key) != userData_.end()) {
302 return userData_[key];
303 }
304
305 return "";
306 }
307
RegisterConsumerListener(sptr<IBufferConsumerListener>& listener)308 GSError ConsumerSurface::RegisterConsumerListener(sptr<IBufferConsumerListener>& listener)
309 {
310 if (listener == nullptr || consumer_ == nullptr) {
311 return GSERROR_INVALID_ARGUMENTS;
312 }
313 return consumer_->RegisterConsumerListener(listener);
314 }
315
RegisterConsumerListener(IBufferConsumerListenerClazz *listener)316 GSError ConsumerSurface::RegisterConsumerListener(IBufferConsumerListenerClazz *listener)
317 {
318 if (listener == nullptr || consumer_ == nullptr) {
319 return GSERROR_INVALID_ARGUMENTS;
320 }
321 return consumer_->RegisterConsumerListener(listener);
322 }
323
RegisterReleaseListener(OnReleaseFunc func)324 GSError ConsumerSurface::RegisterReleaseListener(OnReleaseFunc func)
325 {
326 if (func == nullptr || consumer_ == nullptr) {
327 return GSERROR_INVALID_ARGUMENTS;
328 }
329 return consumer_->RegisterReleaseListener(func);
330 }
331
RegisterDeleteBufferListener(OnDeleteBufferFunc func, bool isForUniRedraw)332 GSError ConsumerSurface::RegisterDeleteBufferListener(OnDeleteBufferFunc func, bool isForUniRedraw)
333 {
334 if (func == nullptr || consumer_ == nullptr) {
335 return GSERROR_INVALID_ARGUMENTS;
336 }
337 return consumer_->RegisterDeleteBufferListener(func, isForUniRedraw);
338 }
339
UnregisterConsumerListener()340 GSError ConsumerSurface::UnregisterConsumerListener()
341 {
342 if (consumer_ == nullptr) {
343 return GSERROR_INVALID_ARGUMENTS;
344 }
345 return consumer_->UnregisterConsumerListener();
346 }
347
RegisterUserDataChangeListener(const std::string& funcName, OnUserDataChangeFunc func)348 GSError ConsumerSurface::RegisterUserDataChangeListener(const std::string& funcName, OnUserDataChangeFunc func)
349 {
350 if (func == nullptr) {
351 return GSERROR_INVALID_ARGUMENTS;
352 }
353 std::lock_guard<std::mutex> lockGuard(lockMutex_);
354 if (onUserDataChange_.find(funcName) != onUserDataChange_.end()) {
355 BLOGD("already register func: %{public}s, uniqueId: %{public}" PRIu64 ".",
356 funcName.c_str(), uniqueId_);
357 return GSERROR_INVALID_ARGUMENTS;
358 }
359
360 onUserDataChange_[funcName] = func;
361 return GSERROR_OK;
362 }
363
UnRegisterUserDataChangeListener(const std::string& funcName)364 GSError ConsumerSurface::UnRegisterUserDataChangeListener(const std::string& funcName)
365 {
366 std::lock_guard<std::mutex> lockGuard(lockMutex_);
367 if (onUserDataChange_.erase(funcName) == 0) {
368 BLOGD("no register funcName: %{public}s, uniqueId: %{public}" PRIu64 ".",
369 funcName.c_str(), uniqueId_);
370 return GSERROR_INVALID_ARGUMENTS;
371 }
372
373 return GSERROR_OK;
374 }
375
ClearUserDataChangeListener()376 GSError ConsumerSurface::ClearUserDataChangeListener()
377 {
378 std::lock_guard<std::mutex> lockGuard(lockMutex_);
379 onUserDataChange_.clear();
380 return GSERROR_OK;
381 }
382
GoBackground()383 GSError ConsumerSurface::GoBackground()
384 {
385 if (consumer_ == nullptr) {
386 return GSERROR_INVALID_ARGUMENTS;
387 }
388 if (producer_ != nullptr) {
389 BLOGD("GoBackground, uniqueId: %{public}" PRIu64 ".", uniqueId_);
390 }
391 return consumer_->GoBackground();
392 }
393
GetUniqueId() const394 uint64_t ConsumerSurface::GetUniqueId() const
395 {
396 if (producer_ == nullptr) {
397 return 0;
398 }
399 return producer_->GetUniqueId();
400 }
401
Dump(std::string& result) const402 void ConsumerSurface::Dump(std::string& result) const
403 {
404 if (consumer_ == nullptr) {
405 return;
406 }
407 return consumer_->Dump(result);
408 }
409
SetTransform(GraphicTransformType transform)410 GSError ConsumerSurface::SetTransform(GraphicTransformType transform)
411 {
412 if (producer_ == nullptr) {
413 return GSERROR_INVALID_ARGUMENTS;
414 }
415 return producer_->SetTransform(transform);
416 }
417
GetTransform() const418 GraphicTransformType ConsumerSurface::GetTransform() const
419 {
420 if (consumer_ == nullptr) {
421 return GraphicTransformType::GRAPHIC_ROTATE_BUTT;
422 }
423 return consumer_->GetTransform();
424 }
425
SetScalingMode(uint32_t sequence, ScalingMode scalingMode)426 GSError ConsumerSurface::SetScalingMode(uint32_t sequence, ScalingMode scalingMode)
427 {
428 if (producer_ == nullptr || scalingMode < ScalingMode::SCALING_MODE_FREEZE ||
429 scalingMode > ScalingMode::SCALING_MODE_SCALE_FIT) {
430 return GSERROR_INVALID_ARGUMENTS;
431 }
432 return producer_->SetScalingMode(sequence, scalingMode);
433 }
434
SetScalingMode(ScalingMode scalingMode)435 GSError ConsumerSurface::SetScalingMode(ScalingMode scalingMode)
436 {
437 if (producer_ == nullptr || scalingMode < ScalingMode::SCALING_MODE_FREEZE ||
438 scalingMode > ScalingMode::SCALING_MODE_SCALE_FIT) {
439 return GSERROR_INVALID_ARGUMENTS;
440 }
441 return producer_->SetScalingMode(scalingMode);
442 }
443
GetScalingMode(uint32_t sequence, ScalingMode& scalingMode)444 GSError ConsumerSurface::GetScalingMode(uint32_t sequence, ScalingMode& scalingMode)
445 {
446 if (consumer_ == nullptr) {
447 return GSERROR_INVALID_ARGUMENTS;
448 }
449 return consumer_->GetScalingMode(sequence, scalingMode);
450 }
451
SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData>& metaData)452 GSError ConsumerSurface::SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData>& metaData)
453 {
454 if (producer_ == nullptr || metaData.size() == 0) {
455 return GSERROR_INVALID_ARGUMENTS;
456 }
457 return producer_->SetMetaData(sequence, metaData);
458 }
459
SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key, const std::vector<uint8_t>& metaData)460 GSError ConsumerSurface::SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key,
461 const std::vector<uint8_t>& metaData)
462 {
463 if (producer_ == nullptr || key < GraphicHDRMetadataKey::GRAPHIC_MATAKEY_RED_PRIMARY_X ||
464 key > GraphicHDRMetadataKey::GRAPHIC_MATAKEY_HDR_VIVID || metaData.size() == 0) {
465 return GSERROR_INVALID_ARGUMENTS;
466 }
467 return producer_->SetMetaDataSet(sequence, key, metaData);
468 }
469
QueryMetaDataType(uint32_t sequence, HDRMetaDataType& type) const470 GSError ConsumerSurface::QueryMetaDataType(uint32_t sequence, HDRMetaDataType& type) const
471 {
472 if (consumer_ == nullptr) {
473 return GSERROR_INVALID_ARGUMENTS;
474 }
475 return consumer_->QueryMetaDataType(sequence, type);
476 }
477
GetMetaData(uint32_t sequence, std::vector<GraphicHDRMetaData>& metaData) const478 GSError ConsumerSurface::GetMetaData(uint32_t sequence, std::vector<GraphicHDRMetaData>& metaData) const
479 {
480 if (consumer_ == nullptr) {
481 return GSERROR_INVALID_ARGUMENTS;
482 }
483 return consumer_->GetMetaData(sequence, metaData);
484 }
485
GetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey& key, std::vector<uint8_t>& metaData) const486 GSError ConsumerSurface::GetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey& key,
487 std::vector<uint8_t>& metaData) const
488 {
489 if (consumer_ == nullptr) {
490 return GSERROR_INVALID_ARGUMENTS;
491 }
492 return consumer_->GetMetaDataSet(sequence, key, metaData);
493 }
494
SetTunnelHandle(const GraphicExtDataHandle *handle)495 GSError ConsumerSurface::SetTunnelHandle(const GraphicExtDataHandle *handle)
496 {
497 if (producer_ == nullptr || handle == nullptr || handle->reserveInts == 0) {
498 return GSERROR_INVALID_ARGUMENTS;
499 }
500 return producer_->SetTunnelHandle(handle);
501 }
502
GetTunnelHandle() const503 sptr<SurfaceTunnelHandle> ConsumerSurface::GetTunnelHandle() const
504 {
505 if (consumer_ == nullptr) {
506 return nullptr;
507 }
508 return consumer_->GetTunnelHandle();
509 }
510
SetBufferHold(bool hold)511 void ConsumerSurface::SetBufferHold(bool hold)
512 {
513 if (consumer_ == nullptr) {
514 return;
515 }
516 consumer_->SetBufferHold(hold);
517 }
518
SetPresentTimestamp(uint32_t sequence, const GraphicPresentTimestamp& timestamp)519 GSError ConsumerSurface::SetPresentTimestamp(uint32_t sequence, const GraphicPresentTimestamp& timestamp)
520 {
521 if (consumer_ == nullptr || timestamp.type == GraphicPresentTimestampType::GRAPHIC_DISPLAY_PTS_UNSUPPORTED) {
522 return GSERROR_INVALID_ARGUMENTS;
523 }
524 return consumer_->SetPresentTimestamp(sequence, timestamp);
525 }
526
ConsumerRequestCpuAccess(bool on)527 void ConsumerSurface::ConsumerRequestCpuAccess(bool on)
528 {
529 if (consumer_ == nullptr) {
530 return;
531 }
532 consumer_->ConsumerRequestCpuAccess(on);
533 }
534
GetTransformHint() const535 GraphicTransformType ConsumerSurface::GetTransformHint() const
536 {
537 if (producer_ == nullptr) {
538 return GraphicTransformType::GRAPHIC_ROTATE_BUTT;
539 }
540 GraphicTransformType transformHint = GraphicTransformType::GRAPHIC_ROTATE_BUTT;
541 if (producer_->GetTransformHint(transformHint) != GSERROR_OK) {
542 BLOGE("GetTransformHint failed, uniqueId: %{public}" PRIu64 ".", uniqueId_);
543 return GraphicTransformType::GRAPHIC_ROTATE_BUTT;
544 }
545 return transformHint;
546 }
547
SetTransformHint(GraphicTransformType transformHint)548 GSError ConsumerSurface::SetTransformHint(GraphicTransformType transformHint)
549 {
550 if (producer_ == nullptr) {
551 return GSERROR_INVALID_ARGUMENTS;
552 }
553 return producer_->SetTransformHint(transformHint);
554 }
555
SetSurfaceSourceType(OHSurfaceSource sourceType)556 GSError ConsumerSurface::SetSurfaceSourceType(OHSurfaceSource sourceType)
557 {
558 if (producer_ == nullptr) {
559 return GSERROR_INVALID_ARGUMENTS;
560 }
561 return producer_->SetSurfaceSourceType(sourceType);
562 }
563
GetSurfaceSourceType() const564 OHSurfaceSource ConsumerSurface::GetSurfaceSourceType() const
565 {
566 if (producer_ == nullptr) {
567 return OHSurfaceSource::OH_SURFACE_SOURCE_DEFAULT;
568 }
569 OHSurfaceSource sourceType = OHSurfaceSource::OH_SURFACE_SOURCE_DEFAULT;
570 if (producer_->GetSurfaceSourceType(sourceType) != GSERROR_OK) {
571 BLOGE("GetSurfaceSourceType failed, uniqueId: %{public}" PRIu64 ".", uniqueId_);
572 return OHSurfaceSource::OH_SURFACE_SOURCE_DEFAULT;
573 }
574 return sourceType;
575 }
576
SetSurfaceAppFrameworkType(std::string appFrameworkType)577 GSError ConsumerSurface::SetSurfaceAppFrameworkType(std::string appFrameworkType)
578 {
579 if (producer_ == nullptr) {
580 return GSERROR_INVALID_ARGUMENTS;
581 }
582 return producer_->SetSurfaceAppFrameworkType(appFrameworkType);
583 }
584
GetSurfaceAppFrameworkType() const585 std::string ConsumerSurface::GetSurfaceAppFrameworkType() const
586 {
587 if (producer_ == nullptr) {
588 return "";
589 }
590 std::string appFrameworkType = "";
591 if (producer_->GetSurfaceAppFrameworkType(appFrameworkType) != GSERROR_OK) {
592 BLOGE("GetSurfaceAppFrameworkType failed, uniqueId: %{public}" PRIu64 ".", uniqueId_);
593 return "";
594 }
595 return appFrameworkType;
596 }
597
SetRequestWidthAndHeight(int32_t width, int32_t height)598 void ConsumerSurface::SetRequestWidthAndHeight(int32_t width, int32_t height)
599 {
600 (void)width;
601 (void)height;
602 }
603
GetRequestWidth()604 int32_t ConsumerSurface::GetRequestWidth()
605 {
606 return 0;
607 }
608
GetRequestHeight()609 int32_t ConsumerSurface::GetRequestHeight()
610 {
611 return 0;
612 }
613
SetHdrWhitePointBrightness(float brightness)614 GSError ConsumerSurface::SetHdrWhitePointBrightness(float brightness)
615 {
616 (void)brightness;
617 return GSERROR_OK;
618 }
619
SetSdrWhitePointBrightness(float brightness)620 GSError ConsumerSurface::SetSdrWhitePointBrightness(float brightness)
621 {
622 (void)brightness;
623 return GSERROR_OK;
624 }
625
GetHdrWhitePointBrightness() const626 float ConsumerSurface::GetHdrWhitePointBrightness() const
627 {
628 if (consumer_ == nullptr) {
629 return 0;
630 }
631 return consumer_->GetHdrWhitePointBrightness();
632 }
633
GetSdrWhitePointBrightness() const634 float ConsumerSurface::GetSdrWhitePointBrightness() const
635 {
636 if (consumer_ == nullptr) {
637 return 0;
638 }
639 return consumer_->GetSdrWhitePointBrightness();
640 }
641
GetSurfaceBufferTransformType(sptr<SurfaceBuffer> buffer, GraphicTransformType *transformType)642 GSError ConsumerSurface::GetSurfaceBufferTransformType(sptr<SurfaceBuffer> buffer,
643 GraphicTransformType *transformType)
644 {
645 if (buffer == nullptr || transformType == nullptr) {
646 return SURFACE_ERROR_INVALID_PARAM;
647 }
648 *transformType = buffer->GetSurfaceBufferTransform();
649 return GSERROR_OK;
650 }
651
IsSurfaceBufferInCache(uint32_t seqNum, bool& isInCache)652 GSError ConsumerSurface::IsSurfaceBufferInCache(uint32_t seqNum, bool& isInCache)
653 {
654 if (consumer_ == nullptr) {
655 return SURFACE_ERROR_UNKOWN;
656 }
657 return consumer_->IsSurfaceBufferInCache(seqNum, isInCache);
658 }
659
AcquireLastFlushedBuffer(sptr<SurfaceBuffer> &buffer, sptr<SyncFence> &fence, float matrix[16], uint32_t matrixSize, bool isUseNewMatrix)660 GSError ConsumerSurface::AcquireLastFlushedBuffer(sptr<SurfaceBuffer> &buffer, sptr<SyncFence> &fence,
661 float matrix[16], uint32_t matrixSize, bool isUseNewMatrix)
662 {
663 return GSERROR_NOT_SUPPORT;
664 }
665
ReleaseLastFlushedBuffer(sptr<SurfaceBuffer> buffer)666 GSError ConsumerSurface::ReleaseLastFlushedBuffer(sptr<SurfaceBuffer> buffer)
667 {
668 return GSERROR_NOT_SUPPORT;
669 }
670
SetGlobalAlpha(int32_t alpha)671 GSError ConsumerSurface::SetGlobalAlpha(int32_t alpha)
672 {
673 (void)alpha;
674 return GSERROR_NOT_SUPPORT;
675 }
676
GetGlobalAlpha(int32_t &alpha)677 GSError ConsumerSurface::GetGlobalAlpha(int32_t &alpha)
678 {
679 if (consumer_ == nullptr) {
680 return SURFACE_ERROR_UNKOWN;
681 }
682 return consumer_->GetGlobalAlpha(alpha);
683 }
684
GetAvailableBufferCount() const685 uint32_t ConsumerSurface::GetAvailableBufferCount() const
686 {
687 if (consumer_ == nullptr) {
688 return 0;
689 }
690 return consumer_->GetAvailableBufferCount();
691 }
692 } // namespace OHOS
693