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