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)31 GSError BufferQueueConsumer::AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence,
32 int64_t ×tamp, std::vector<Rect> &damages)
33 {
34 if (bufferQueue_ == nullptr) {
35 return GSERROR_INVALID_ARGUMENTS;
36 }
37 return bufferQueue_->AcquireBuffer(buffer, fence, timestamp, damages);
38 }
39
ReleaseBuffer(sptr<SurfaceBuffer> & buffer,const sptr<SyncFence> & fence)40 GSError BufferQueueConsumer::ReleaseBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence)
41 {
42 if (bufferQueue_ == nullptr) {
43 return GSERROR_INVALID_ARGUMENTS;
44 }
45 return bufferQueue_->ReleaseBuffer(buffer, fence);
46 }
47
AttachBuffer(sptr<SurfaceBuffer> & buffer)48 GSError BufferQueueConsumer::AttachBuffer(sptr<SurfaceBuffer>& buffer)
49 {
50 int32_t timeOut = 0;
51 return AttachBuffer(buffer, timeOut);
52 }
53
AttachBuffer(sptr<SurfaceBuffer> & buffer,int32_t timeOut)54 GSError BufferQueueConsumer::AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut)
55 {
56 if (bufferQueue_ == nullptr) {
57 return GSERROR_INVALID_ARGUMENTS;
58 }
59 return bufferQueue_->AttachBuffer(buffer, timeOut);
60 }
61
DetachBuffer(sptr<SurfaceBuffer> & buffer)62 GSError BufferQueueConsumer::DetachBuffer(sptr<SurfaceBuffer>& buffer)
63 {
64 if (bufferQueue_ == nullptr) {
65 return GSERROR_INVALID_ARGUMENTS;
66 }
67 return bufferQueue_->DetachBuffer(buffer);
68 }
69
RegisterSurfaceDelegator(sptr<IRemoteObject> client,sptr<Surface> cSurface)70 GSError BufferQueueConsumer::RegisterSurfaceDelegator(sptr<IRemoteObject> client, sptr<Surface> cSurface)
71 {
72 if (bufferQueue_ == nullptr) {
73 BLOGFE("RegisterSurfaceDelegator failed for nullptr bufferqueue.");
74 return GSERROR_INVALID_ARGUMENTS;
75 }
76 return bufferQueue_->RegisterSurfaceDelegator(client, cSurface);
77 }
78
QueryIfBufferAvailable()79 bool BufferQueueConsumer::QueryIfBufferAvailable()
80 {
81 if (bufferQueue_ == nullptr) {
82 return false;
83 }
84 return bufferQueue_->QueryIfBufferAvailable();
85 }
86
RegisterConsumerListener(sptr<IBufferConsumerListener> & listener)87 GSError BufferQueueConsumer::RegisterConsumerListener(sptr<IBufferConsumerListener>& listener)
88 {
89 if (bufferQueue_ == nullptr) {
90 return GSERROR_INVALID_ARGUMENTS;
91 }
92 return bufferQueue_->RegisterConsumerListener(listener);
93 }
94
RegisterConsumerListener(IBufferConsumerListenerClazz * listener)95 GSError BufferQueueConsumer::RegisterConsumerListener(IBufferConsumerListenerClazz *listener)
96 {
97 if (bufferQueue_ == nullptr) {
98 return GSERROR_INVALID_ARGUMENTS;
99 }
100 return bufferQueue_->RegisterConsumerListener(listener);
101 }
102
RegisterReleaseListener(OnReleaseFunc func)103 GSError BufferQueueConsumer::RegisterReleaseListener(OnReleaseFunc func)
104 {
105 if (bufferQueue_ == nullptr) {
106 return GSERROR_INVALID_ARGUMENTS;
107 }
108 return bufferQueue_->RegisterReleaseListener(func);
109 }
110
RegisterDeleteBufferListener(OnDeleteBufferFunc func,bool isForUniRedraw)111 GSError BufferQueueConsumer::RegisterDeleteBufferListener(OnDeleteBufferFunc func, bool isForUniRedraw)
112 {
113 if (bufferQueue_ == nullptr) {
114 return GSERROR_INVALID_ARGUMENTS;
115 }
116 return bufferQueue_->RegisterDeleteBufferListener(func, isForUniRedraw);
117 }
118
UnregisterConsumerListener()119 GSError BufferQueueConsumer::UnregisterConsumerListener()
120 {
121 if (bufferQueue_ == nullptr) {
122 return GSERROR_INVALID_ARGUMENTS;
123 }
124 return bufferQueue_->UnregisterConsumerListener();
125 }
126
SetDefaultWidthAndHeight(int32_t width,int32_t height)127 GSError BufferQueueConsumer::SetDefaultWidthAndHeight(int32_t width, int32_t height)
128 {
129 if (bufferQueue_ == nullptr) {
130 return GSERROR_INVALID_ARGUMENTS;
131 }
132 return bufferQueue_->SetDefaultWidthAndHeight(width, height);
133 }
134
SetDefaultUsage(uint32_t usage)135 GSError BufferQueueConsumer::SetDefaultUsage(uint32_t usage)
136 {
137 if (bufferQueue_ == nullptr) {
138 return GSERROR_INVALID_ARGUMENTS;
139 }
140 return bufferQueue_->SetDefaultUsage(usage);
141 }
142
Dump(std::string & result) const143 void BufferQueueConsumer::Dump(std::string &result) const
144 {
145 if (bufferQueue_ == nullptr) {
146 return;
147 }
148 return bufferQueue_->Dump(result);
149 }
150
GetTransform() const151 GraphicTransformType BufferQueueConsumer::GetTransform() const
152 {
153 if (bufferQueue_ == nullptr) {
154 return GraphicTransformType::GRAPHIC_ROTATE_BUTT;
155 }
156 return bufferQueue_->GetTransform();
157 }
158
GetScalingMode(uint32_t sequence,ScalingMode & scalingMode) const159 GSError BufferQueueConsumer::GetScalingMode(uint32_t sequence, ScalingMode &scalingMode) const
160 {
161 if (bufferQueue_ == nullptr) {
162 return GSERROR_INVALID_ARGUMENTS;
163 }
164 return bufferQueue_->GetScalingMode(sequence, scalingMode);
165 }
166
QueryMetaDataType(uint32_t sequence,HDRMetaDataType & type) const167 GSError BufferQueueConsumer::QueryMetaDataType(uint32_t sequence, HDRMetaDataType &type) const
168 {
169 if (bufferQueue_ == nullptr) {
170 return GSERROR_INVALID_ARGUMENTS;
171 }
172 return bufferQueue_->QueryMetaDataType(sequence, type);
173 }
174
GetMetaData(uint32_t sequence,std::vector<GraphicHDRMetaData> & metaData) const175 GSError BufferQueueConsumer::GetMetaData(uint32_t sequence, std::vector<GraphicHDRMetaData> &metaData) const
176 {
177 if (bufferQueue_ == nullptr) {
178 return GSERROR_INVALID_ARGUMENTS;
179 }
180 return bufferQueue_->GetMetaData(sequence, metaData);
181 }
182
GetMetaDataSet(uint32_t sequence,GraphicHDRMetadataKey & key,std::vector<uint8_t> & metaData) const183 GSError BufferQueueConsumer::GetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey &key,
184 std::vector<uint8_t> &metaData) const
185 {
186 if (bufferQueue_ == nullptr) {
187 return GSERROR_INVALID_ARGUMENTS;
188 }
189 return bufferQueue_->GetMetaDataSet(sequence, key, metaData);
190 }
191
GetTunnelHandle() const192 sptr<SurfaceTunnelHandle> BufferQueueConsumer::GetTunnelHandle() const
193 {
194 if (bufferQueue_ == nullptr) {
195 return nullptr;
196 }
197 return bufferQueue_->GetTunnelHandle();
198 }
199
SetPresentTimestamp(uint32_t sequence,const GraphicPresentTimestamp & timestamp)200 GSError BufferQueueConsumer::SetPresentTimestamp(uint32_t sequence, const GraphicPresentTimestamp ×tamp)
201 {
202 if (bufferQueue_ == nullptr) {
203 return GSERROR_INVALID_ARGUMENTS;
204 }
205 return bufferQueue_->SetPresentTimestamp(sequence, timestamp);
206 }
207
GetStatus() const208 bool BufferQueueConsumer::GetStatus() const
209 {
210 return bufferQueue_->GetStatus();
211 }
212
SetStatus(bool status)213 void BufferQueueConsumer::SetStatus(bool status)
214 {
215 bufferQueue_->SetStatus(status);
216 }
217
OnConsumerDied()218 GSError BufferQueueConsumer::OnConsumerDied()
219 {
220 if (bufferQueue_ == nullptr) {
221 return GSERROR_INVALID_ARGUMENTS;
222 }
223 return bufferQueue_->OnConsumerDied();
224 }
225
GoBackground()226 GSError BufferQueueConsumer::GoBackground()
227 {
228 if (bufferQueue_ == nullptr) {
229 return GSERROR_INVALID_ARGUMENTS;
230 }
231 return bufferQueue_->GoBackground();
232 }
233 } // namespace OHOS
234