• 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 "producer_surface.h"
17 
18 #include <cinttypes>
19 
20 #include "buffer_log.h"
21 #include "buffer_extra_data_impl.h"
22 #include "buffer_producer_listener.h"
23 #include "sync_fence.h"
24 #include "native_window.h"
25 
26 namespace OHOS {
27 namespace {
28 constexpr int32_t PRODUCER_REF_COUNT_IN_PRODUCER_SURFACE = 1;
29 }
30 
CreateSurfaceAsProducer(sptr<IBufferProducer> & producer)31 sptr<Surface> Surface::CreateSurfaceAsProducer(sptr<IBufferProducer>& producer)
32 {
33     if (producer == nullptr) {
34         BLOGE("Failure, Reason: producer is nullptr");
35         return nullptr;
36     }
37 
38     sptr<ProducerSurface> surf = new ProducerSurface(producer);
39     GSError ret = surf->Init();
40     if (ret != GSERROR_OK) {
41         BLOGE("Failure, Reason: producer surf init failed");
42         return nullptr;
43     }
44     return surf;
45 }
46 
ProducerSurface(sptr<IBufferProducer> & producer)47 ProducerSurface::ProducerSurface(sptr<IBufferProducer>& producer)
48 {
49     producer_ = producer;
50     if (producer_) {
51         producer_->SendDeathRecipientObject();
52     }
53     BLOGND("ctor");
54 }
55 
~ProducerSurface()56 ProducerSurface::~ProducerSurface()
57 {
58     if (producer_->GetSptrRefCount() > PRODUCER_REF_COUNT_IN_PRODUCER_SURFACE) {
59         BLOGND("Warning SptrRefCount! producer_:%{public}d", producer_->GetSptrRefCount());
60     }
61     BLOGND("dtor, name:%{public}s, Queue Id:%{public}" PRIu64, name_.c_str(), queueId_);
62     auto ret = Disconnect();
63     if (ret != GSERROR_OK) {
64         BLOGND("Disconnect failed, %{public}s", GSErrorStr(ret).c_str());
65     }
66 }
67 
Init()68 GSError ProducerSurface::Init()
69 {
70     if (inited_.load()) {
71         return GSERROR_OK;
72     }
73     auto ret = producer_->GetNameAndUniqueId(name_, queueId_);
74     if (ret != GSERROR_OK) {
75         BLOGNE("GetNameAndUniqueId failed, %{public}s", GSErrorStr(ret).c_str());
76     }
77     inited_.store(true);
78     BLOGND("ctor, name:%{public}s, Queue Id:%{public}" PRIu64, name_.c_str(), queueId_);
79     return GSERROR_OK;
80 }
81 
IsConsumer() const82 bool ProducerSurface::IsConsumer() const
83 {
84     return false;
85 }
86 
GetProducer() const87 sptr<IBufferProducer> ProducerSurface::GetProducer() const
88 {
89     return producer_;
90 }
91 
RequestBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,BufferRequestConfig & config)92 GSError ProducerSurface::RequestBuffer(sptr<SurfaceBuffer>& buffer,
93                                        sptr<SyncFence>& fence, BufferRequestConfig &config)
94 {
95     IBufferProducer::RequestBufferReturnValue retval;
96     sptr<BufferExtraData> bedataimpl = new BufferExtraDataImpl;
97     GSError ret = producer_->RequestBuffer(config, bedataimpl, retval);
98     if (ret != GSERROR_OK) {
99         if (ret == GSERROR_NO_CONSUMER) {
100             CleanCache();
101         }
102         BLOGND("RequestBuffer Producer report %{public}s", GSErrorStr(ret).c_str());
103         return ret;
104     }
105 
106     std::lock_guard<std::mutex> lockGuard(mutex_);
107     if (isDisconnected) {
108         isDisconnected = false;
109     }
110     // add cache
111     if (retval.buffer != nullptr) {
112         bufferProducerCache_[retval.sequence] = retval.buffer;
113     } else if (bufferProducerCache_.find(retval.sequence) == bufferProducerCache_.end()) {
114         return GSERROR_API_FAILED;
115     } else {
116         retval.buffer = bufferProducerCache_[retval.sequence];
117     }
118     buffer = retval.buffer;
119     fence = retval.fence;
120 
121     if (static_cast<uint64_t>(config.usage) & BUFFER_USAGE_CPU_WRITE) {
122         ret = buffer->InvalidateCache();
123         if (ret != GSERROR_OK) {
124             BLOGNW("Warning [%{public}d], InvalidateCache failed", retval.sequence);
125         }
126     }
127 
128     if (buffer != nullptr) {
129         buffer->SetExtraData(bedataimpl);
130     }
131 
132     for (auto it = retval.deletingBuffers.begin(); it != retval.deletingBuffers.end(); it++) {
133         uint32_t seqNum = static_cast<uint32_t>(*it);
134         bufferProducerCache_.erase(seqNum);
135         auto spNativeWindow = wpNativeWindow_.promote();
136         if (spNativeWindow != nullptr) {
137             auto &bufferCache = spNativeWindow->bufferCache_;
138             if (bufferCache.find(seqNum) != bufferCache.end()) {
139                 NativeObjectUnreference(bufferCache[seqNum]);
140                 bufferCache.erase(seqNum);
141             }
142         }
143     }
144     return GSERROR_OK;
145 }
146 
FlushBuffer(sptr<SurfaceBuffer> & buffer,const sptr<SyncFence> & fence,BufferFlushConfig & config)147 GSError ProducerSurface::FlushBuffer(sptr<SurfaceBuffer>& buffer,
148                                      const sptr<SyncFence>& fence, BufferFlushConfig &config)
149 {
150     BufferFlushConfigWithDamages configWithDamages;
151     configWithDamages.damages.push_back(config.damage);
152     configWithDamages.timestamp = config.timestamp;
153     return FlushBuffer(buffer, fence, configWithDamages);
154 }
155 
FlushBuffer(sptr<SurfaceBuffer> & buffer,const sptr<SyncFence> & fence,BufferFlushConfigWithDamages & config)156 GSError ProducerSurface::FlushBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence,
157                                      BufferFlushConfigWithDamages &config)
158 {
159     if (buffer == nullptr) {
160         return GSERROR_INVALID_ARGUMENTS;
161     }
162 
163     const sptr<BufferExtraData>& bedata = buffer->GetExtraData();
164     auto ret = producer_->FlushBuffer(buffer->GetSeqNum(), bedata, fence, config);
165     if (ret == GSERROR_NO_CONSUMER) {
166         CleanCache();
167         BLOGND("FlushBuffer Producer report %{public}s", GSErrorStr(ret).c_str());
168     }
169     return ret;
170 }
171 
GetLastFlushedBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,float matrix[16])172 GSError ProducerSurface::GetLastFlushedBuffer(sptr<SurfaceBuffer>& buffer,
173     sptr<SyncFence>& fence, float matrix[16])
174 {
175     auto ret = producer_->GetLastFlushedBuffer(buffer, fence, matrix);
176     return ret;
177 }
178 
AcquireBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,int64_t & timestamp,Rect & damage)179 GSError ProducerSurface::AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence,
180                                        int64_t &timestamp, Rect &damage)
181 {
182     return GSERROR_NOT_SUPPORT;
183 }
ReleaseBuffer(sptr<SurfaceBuffer> & buffer,const sptr<SyncFence> & fence)184 GSError ProducerSurface::ReleaseBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence)
185 {
186     return GSERROR_NOT_SUPPORT;
187 }
188 
RequestBuffer(sptr<SurfaceBuffer> & buffer,int32_t & fence,BufferRequestConfig & config)189 GSError ProducerSurface::RequestBuffer(sptr<SurfaceBuffer>& buffer,
190     int32_t &fence, BufferRequestConfig &config)
191 {
192     sptr<SyncFence> syncFence = SyncFence::INVALID_FENCE;
193     auto ret = RequestBuffer(buffer, syncFence, config);
194     if (ret != GSERROR_OK) {
195         fence = -1;
196         return ret;
197     }
198     fence = syncFence->Dup();
199     return GSERROR_OK;
200 }
201 
CancelBuffer(sptr<SurfaceBuffer> & buffer)202 GSError ProducerSurface::CancelBuffer(sptr<SurfaceBuffer>& buffer)
203 {
204     if (buffer == nullptr) {
205         return GSERROR_INVALID_ARGUMENTS;
206     }
207 
208     const sptr<BufferExtraData>& bedata = buffer->GetExtraData();
209     return producer_->CancelBuffer(buffer->GetSeqNum(), bedata);
210 }
211 
FlushBuffer(sptr<SurfaceBuffer> & buffer,int32_t fence,BufferFlushConfig & config)212 GSError ProducerSurface::FlushBuffer(sptr<SurfaceBuffer>& buffer,
213     int32_t fence, BufferFlushConfig &config)
214 {
215     // fence need close?
216     sptr<SyncFence> syncFence = new SyncFence(fence);
217     return FlushBuffer(buffer, syncFence, config);
218 }
219 
AcquireBuffer(sptr<SurfaceBuffer> & buffer,int32_t & fence,int64_t & timestamp,Rect & damage)220 GSError ProducerSurface::AcquireBuffer(sptr<SurfaceBuffer>& buffer, int32_t &fence,
221     int64_t &timestamp, Rect &damage)
222 {
223     return GSERROR_NOT_SUPPORT;
224 }
225 
ReleaseBuffer(sptr<SurfaceBuffer> & buffer,int32_t fence)226 GSError ProducerSurface::ReleaseBuffer(sptr<SurfaceBuffer>& buffer, int32_t fence)
227 {
228     return GSERROR_NOT_SUPPORT;
229 }
230 
AttachBuffer(sptr<SurfaceBuffer> & buffer)231 GSError ProducerSurface::AttachBuffer(sptr<SurfaceBuffer>& buffer)
232 {
233     if (buffer == nullptr) {
234         return GSERROR_INVALID_ARGUMENTS;
235     }
236 
237     return producer_->AttachBuffer(buffer);
238 }
239 
AttachBuffer(sptr<SurfaceBuffer> & buffer,int32_t timeOut)240 GSError ProducerSurface::AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut)
241 {
242     if (buffer == nullptr) {
243         return GSERROR_INVALID_ARGUMENTS;
244     }
245 
246     return producer_->AttachBuffer(buffer, timeOut);
247 }
248 
DetachBuffer(sptr<SurfaceBuffer> & buffer)249 GSError ProducerSurface::DetachBuffer(sptr<SurfaceBuffer>& buffer)
250 {
251     if (buffer == nullptr) {
252         return GSERROR_INVALID_ARGUMENTS;
253     }
254     return producer_->DetachBuffer(buffer);
255 }
256 
RegisterSurfaceDelegator(sptr<IRemoteObject> client)257 GSError ProducerSurface::RegisterSurfaceDelegator(sptr<IRemoteObject> client)
258 {
259     if (client == nullptr) {
260         BLOGE("RegisterSurfaceDelegator failed for the delegator client is nullptr");
261         return GSERROR_INVALID_ARGUMENTS;
262     }
263     sptr<ProducerSurfaceDelegator> surfaceDelegator = ProducerSurfaceDelegator::Create();
264     if (surfaceDelegator == nullptr) {
265         BLOGE("RegisterSurfaceDelegator failed for the surface delegator is nullptr");
266         return GSERROR_INVALID_ARGUMENTS;
267     }
268     if (!surfaceDelegator->SetClient(client)) {
269         BLOGE("Set the surface delegator client failed");
270         return GSERROR_INVALID_ARGUMENTS;
271     }
272 
273     surfaceDelegator->SetSurface(this);
274     wpPSurfaceDelegator_ = surfaceDelegator;
275 
276     auto releaseBufferCallBack = [this] (const sptr<SurfaceBuffer> &buffer,
277         const sptr<SyncFence> &fence) -> GSError {
278         auto surfaceDelegator = this->wpPSurfaceDelegator_.promote();
279         if (surfaceDelegator == nullptr) {
280             return GSERROR_INVALID_ARGUMENTS;
281         }
282         int error = surfaceDelegator->ReleaseBuffer(buffer, fence);
283         return static_cast<GSError>(error);
284     };
285     RegisterReleaseListener(releaseBufferCallBack);
286     return GSERROR_OK;
287 }
288 
QueryIfBufferAvailable()289 bool ProducerSurface::QueryIfBufferAvailable()
290 {
291     return false;
292 }
293 
GetQueueSize()294 uint32_t ProducerSurface::GetQueueSize()
295 {
296     return producer_->GetQueueSize();
297 }
298 
SetQueueSize(uint32_t queueSize)299 GSError ProducerSurface::SetQueueSize(uint32_t queueSize)
300 {
301     return producer_->SetQueueSize(queueSize);
302 }
303 
GetName()304 const std::string& ProducerSurface::GetName()
305 {
306     if (!inited_.load()) {
307         BLOGNW("Warning ProducerSurface is not initialized, the name you get is uninitialized.");
308     }
309     return name_;
310 }
311 
SetDefaultWidthAndHeight(int32_t width,int32_t height)312 GSError ProducerSurface::SetDefaultWidthAndHeight(int32_t width, int32_t height)
313 {
314     return GSERROR_NOT_SUPPORT;
315 }
316 
GetDefaultWidth()317 int32_t ProducerSurface::GetDefaultWidth()
318 {
319     return producer_->GetDefaultWidth();
320 }
321 
GetDefaultHeight()322 int32_t ProducerSurface::GetDefaultHeight()
323 {
324     return producer_->GetDefaultHeight();
325 }
326 
SetDefaultUsage(uint32_t usage)327 GSError ProducerSurface::SetDefaultUsage(uint32_t usage)
328 {
329     return GSERROR_NOT_SUPPORT;
330 }
331 
GetDefaultUsage()332 uint32_t ProducerSurface::GetDefaultUsage()
333 {
334     return producer_->GetDefaultUsage();
335 }
336 
SetUserData(const std::string & key,const std::string & val)337 GSError ProducerSurface::SetUserData(const std::string &key, const std::string &val)
338 {
339     if (userData_.size() >= SURFACE_MAX_USER_DATA_COUNT) {
340         return GSERROR_OUT_OF_RANGE;
341     }
342     userData_[key] = val;
343     return GSERROR_OK;
344 }
345 
GetUserData(const std::string & key)346 std::string ProducerSurface::GetUserData(const std::string &key)
347 {
348     if (userData_.find(key) != userData_.end()) {
349         return userData_[key];
350     }
351 
352     return "";
353 }
354 
RegisterConsumerListener(sptr<IBufferConsumerListener> & listener)355 GSError ProducerSurface::RegisterConsumerListener(sptr<IBufferConsumerListener>& listener)
356 {
357     return GSERROR_NOT_SUPPORT;
358 }
359 
RegisterConsumerListener(IBufferConsumerListenerClazz * listener)360 GSError ProducerSurface::RegisterConsumerListener(IBufferConsumerListenerClazz *listener)
361 {
362     return GSERROR_NOT_SUPPORT;
363 }
364 
UnregisterConsumerListener()365 GSError ProducerSurface::UnregisterConsumerListener()
366 {
367     return GSERROR_NOT_SUPPORT;
368 }
369 
RegisterReleaseListener(OnReleaseFunc func)370 GSError ProducerSurface::RegisterReleaseListener(OnReleaseFunc func)
371 {
372     if (func == nullptr) {
373         BLOGNE("OnReleaseFunc is nullptr, RegisterReleaseListener failed.");
374         return GSERROR_INVALID_ARGUMENTS;
375     }
376     listener_ = new BufferReleaseProducerListener(func);
377     return producer_->RegisterReleaseListener(listener_);
378 }
379 
RegisterReleaseListener(OnReleaseFuncWithFence funcWithFence)380 GSError ProducerSurface::RegisterReleaseListener(OnReleaseFuncWithFence funcWithFence)
381 {
382     if (funcWithFence == nullptr) {
383         BLOGNE("OnReleaseFuncWithFence is nullptr, RegisterReleaseListener failed.");
384         return GSERROR_INVALID_ARGUMENTS;
385     }
386     listener_ = new BufferReleaseProducerListener(nullptr, funcWithFence);
387     return producer_->RegisterReleaseListener(listener_);
388 }
389 
UnRegisterReleaseListener()390 GSError ProducerSurface::UnRegisterReleaseListener()
391 {
392     if (producer_ == nullptr) {
393         BLOGE("The producer in ProducerSurface is nullptr, UnRegisterReleaseListener failed");
394         return GSERROR_INVALID_ARGUMENTS;
395     }
396     return producer_->UnRegisterReleaseListener();
397 }
398 
RegisterDeleteBufferListener(OnDeleteBufferFunc func,bool isForUniRedraw)399 GSError ProducerSurface::RegisterDeleteBufferListener(OnDeleteBufferFunc func, bool isForUniRedraw)
400 {
401     return GSERROR_NOT_SUPPORT;
402 }
403 
IsRemote()404 bool ProducerSurface::IsRemote()
405 {
406     return producer_->AsObject()->IsProxyObject();
407 }
408 
CleanAllLocked()409 void ProducerSurface::CleanAllLocked()
410 {
411     bufferProducerCache_.clear();
412     auto spNativeWindow = wpNativeWindow_.promote();
413     if (spNativeWindow != nullptr) {
414         auto &bufferCache = spNativeWindow->bufferCache_;
415         for (auto &[seqNum, buffer] : bufferCache) {
416             NativeObjectUnreference(buffer);
417         }
418         bufferCache.clear();
419     }
420 }
421 
CleanCache()422 GSError ProducerSurface::CleanCache()
423 {
424     BLOGND("Queue Id:%{public}" PRIu64, queueId_);
425     {
426         std::lock_guard<std::mutex> lockGuard(mutex_);
427         CleanAllLocked();
428     }
429     return producer_->CleanCache();
430 }
431 
GoBackground()432 GSError ProducerSurface::GoBackground()
433 {
434     BLOGND("Queue Id:%{public}" PRIu64 "", queueId_);
435     {
436         std::lock_guard<std::mutex> lockGuard(mutex_);
437         CleanAllLocked();
438     }
439     return producer_->GoBackground();
440 }
441 
GetUniqueId() const442 uint64_t ProducerSurface::GetUniqueId() const
443 {
444     if (!inited_.load()) {
445         BLOGNW("Warning ProducerSurface is not initialized, the uniquedId you get is uninitialized.");
446     }
447     return queueId_;
448 }
449 
SetTransform(GraphicTransformType transform)450 GSError ProducerSurface::SetTransform(GraphicTransformType transform)
451 {
452     return producer_->SetTransform(transform);
453 }
454 
GetTransform() const455 GraphicTransformType ProducerSurface::GetTransform() const
456 {
457     GraphicTransformType transform = GraphicTransformType::GRAPHIC_ROTATE_BUTT;
458     if (producer_->GetTransform(transform) != GSERROR_OK) {
459         BLOGNE("Warning ProducerSurface GetTransform failed.");
460         return GraphicTransformType::GRAPHIC_ROTATE_BUTT;
461     }
462     return transform;
463 }
464 
IsSupportedAlloc(const std::vector<BufferVerifyAllocInfo> & infos,std::vector<bool> & supporteds)465 GSError ProducerSurface::IsSupportedAlloc(const std::vector<BufferVerifyAllocInfo> &infos,
466                                           std::vector<bool> &supporteds)
467 {
468     if (infos.size() == 0 || infos.size() != supporteds.size()) {
469         return GSERROR_INVALID_ARGUMENTS;
470     }
471     return producer_->IsSupportedAlloc(infos, supporteds);
472 }
473 
Disconnect()474 GSError ProducerSurface::Disconnect()
475 {
476     {
477         std::lock_guard<std::mutex> lockGuard(mutex_);
478         if (isDisconnected) {
479             return GSERROR_INVALID_OPERATING;
480         }
481     }
482     BLOGND("Queue Id:%{public}" PRIu64 "", queueId_);
483     {
484         std::lock_guard<std::mutex> lockGuard(mutex_);
485         CleanAllLocked();
486     }
487     GSError ret = producer_->Disconnect();
488     {
489         std::lock_guard<std::mutex> lockGuard(mutex_);
490         if (ret == GSERROR_OK) {
491             isDisconnected = true;
492         }
493     }
494     return ret;
495 }
496 
SetScalingMode(uint32_t sequence,ScalingMode scalingMode)497 GSError ProducerSurface::SetScalingMode(uint32_t sequence, ScalingMode scalingMode)
498 {
499     if (scalingMode < ScalingMode::SCALING_MODE_FREEZE ||
500         scalingMode > ScalingMode::SCALING_MODE_NO_SCALE_CROP) {
501         return GSERROR_INVALID_ARGUMENTS;
502     }
503     return producer_->SetScalingMode(sequence, scalingMode);
504 }
505 
GetScalingMode(uint32_t sequence,ScalingMode & scalingMode)506 GSError ProducerSurface::GetScalingMode(uint32_t sequence, ScalingMode &scalingMode)
507 {
508     return GSERROR_NOT_SUPPORT;
509 }
510 
SetMetaData(uint32_t sequence,const std::vector<GraphicHDRMetaData> & metaData)511 GSError ProducerSurface::SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData> &metaData)
512 {
513     if (metaData.size() == 0) {
514         return GSERROR_INVALID_ARGUMENTS;
515     }
516     return producer_->SetMetaData(sequence, metaData);
517 }
518 
SetMetaDataSet(uint32_t sequence,GraphicHDRMetadataKey key,const std::vector<uint8_t> & metaData)519 GSError ProducerSurface::SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key,
520                                         const std::vector<uint8_t> &metaData)
521 {
522     if (key < GraphicHDRMetadataKey::GRAPHIC_MATAKEY_RED_PRIMARY_X ||
523         key > GraphicHDRMetadataKey::GRAPHIC_MATAKEY_HDR_VIVID || metaData.size() == 0) {
524         return GSERROR_INVALID_ARGUMENTS;
525     }
526     return producer_->SetMetaDataSet(sequence, key, metaData);
527 }
528 
QueryMetaDataType(uint32_t sequence,HDRMetaDataType & type) const529 GSError ProducerSurface::QueryMetaDataType(uint32_t sequence, HDRMetaDataType &type) const
530 {
531     return GSERROR_NOT_SUPPORT;
532 }
533 
GetMetaData(uint32_t sequence,std::vector<GraphicHDRMetaData> & metaData) const534 GSError ProducerSurface::GetMetaData(uint32_t sequence, std::vector<GraphicHDRMetaData> &metaData) const
535 {
536     return GSERROR_NOT_SUPPORT;
537 }
538 
GetMetaDataSet(uint32_t sequence,GraphicHDRMetadataKey & key,std::vector<uint8_t> & metaData) const539 GSError ProducerSurface::GetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey &key,
540                                         std::vector<uint8_t> &metaData) const
541 {
542     return GSERROR_NOT_SUPPORT;
543 }
544 
SetTunnelHandle(const GraphicExtDataHandle * handle)545 GSError ProducerSurface::SetTunnelHandle(const GraphicExtDataHandle *handle)
546 {
547     return producer_->SetTunnelHandle(handle);
548 }
549 
GetTunnelHandle() const550 sptr<SurfaceTunnelHandle> ProducerSurface::GetTunnelHandle() const
551 {
552     // not support
553     return nullptr;
554 }
555 
SetPresentTimestamp(uint32_t sequence,const GraphicPresentTimestamp & timestamp)556 GSError ProducerSurface::SetPresentTimestamp(uint32_t sequence, const GraphicPresentTimestamp &timestamp)
557 {
558     return GSERROR_NOT_SUPPORT;
559 }
560 
GetPresentTimestamp(uint32_t sequence,GraphicPresentTimestampType type,int64_t & time) const561 GSError ProducerSurface::GetPresentTimestamp(uint32_t sequence, GraphicPresentTimestampType type,
562                                              int64_t &time) const
563 {
564     if (type <= GraphicPresentTimestampType::GRAPHIC_DISPLAY_PTS_UNSUPPORTED ||
565         type > GraphicPresentTimestampType::GRAPHIC_DISPLAY_PTS_TIMESTAMP) {
566         return GSERROR_INVALID_ARGUMENTS;
567     }
568     return producer_->GetPresentTimestamp(sequence, type, time);
569 }
570 
GetDefaultFormat()571 int32_t ProducerSurface::GetDefaultFormat()
572 {
573     BLOGND("ProducerSurface::GetDefaultFormat not support.");
574     return 0;
575 }
576 
SetDefaultFormat(int32_t format)577 GSError ProducerSurface::SetDefaultFormat(int32_t format)
578 {
579     BLOGND("ProducerSurface::SetDefaultFormat not support.");
580     return GSERROR_NOT_SUPPORT;
581 }
582 
GetDefaultColorGamut()583 int32_t ProducerSurface::GetDefaultColorGamut()
584 {
585     BLOGND("ProducerSurface::GetDefaultColorGamut not support.");
586     return 0;
587 }
588 
SetDefaultColorGamut(int32_t colorGamut)589 GSError ProducerSurface::SetDefaultColorGamut(int32_t colorGamut)
590 {
591     BLOGND("ProducerSurface::SetDefaultColorGamut not support.");
592     return GSERROR_NOT_SUPPORT;
593 }
594 
GetNativeSurface()595 sptr<NativeSurface> ProducerSurface::GetNativeSurface()
596 {
597     BLOGND("ProducerSurface::GetNativeSurface not support.");
598     return nullptr;
599 }
600 
SetWptrNativeWindowToPSurface(void * nativeWindow)601 GSError ProducerSurface::SetWptrNativeWindowToPSurface(void* nativeWindow)
602 {
603     NativeWindow *nw = reinterpret_cast<NativeWindow *>(nativeWindow);
604     wpNativeWindow_ = nw;
605     return GSERROR_OK;
606 }
607 } // namespace OHOS
608