• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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 <hilog/log.h>
17 #include "image_receiver_module_test.h"
18 
19 #define IMAGE_LOG_TAG "IMAGE_RECEIVER_TAGLOG"
20 #define IMAGE_LOG_DOMAIN 0x3200
21 #define LOG(fmt, ...) (void)OH_LOG_Print(LOG_APP, LOG_INFO, IMAGE_LOG_DOMAIN, IMAGE_LOG_TAG, fmt, ##__VA_ARGS__)
22 
ImageReceiverModuleTest()23 ImageReceiverModuleTest::ImageReceiverModuleTest()
24 {
25 }
26 
~ImageReceiverModuleTest()27 ImageReceiverModuleTest::~ImageReceiverModuleTest()
28 {
29     DestroyImageReceiver();
30 }
31 
CreateImageReceiver(uint32_t width,uint32_t height,uint32_t capacity)32 Image_ErrorCode ImageReceiverModuleTest::CreateImageReceiver(uint32_t width, uint32_t height, uint32_t capacity)
33 {
34     LOG("CreateImageReceiver enter.");
35     if (imageReceiver_ != nullptr) {
36         if (ReuseSameRecevier(width, height, capacity)) {
37             LOG("Reuse last create ImageReceiver.");
38             return IMAGE_SUCCESS;
39         } else {
40             DestroyImageReceiver();
41         }
42     }
43     OH_ImageReceiverOptions *options = nullptr;
44     Image_ErrorCode ret = OH_ImageReceiverOptions_Create(&options);
45     if (ret != IMAGE_SUCCESS) {
46         LOG("Create Image Receiver options failed: err = %{public}d.", ret);
47         return ret;
48     }
49 
50     width_ = width;
51     height_ = height;
52     capacity_ = capacity;
53     Image_Size size = { width_, height_ };
54     ret = OH_ImageReceiverOptions_SetSize(options, size);
55     if (ret != IMAGE_SUCCESS) {
56         OH_ImageReceiverOptions_Release(options);
57         LOG("Set Image Receiver options size(%{public}dx%{public}d) failed: err = %{public}d.",
58             size.width, size.height, ret);
59         return ret;
60     }
61     ret = OH_ImageReceiverOptions_SetCapacity(options, capacity_);
62     if (ret != IMAGE_SUCCESS) {
63         OH_ImageReceiverOptions_Release(options);
64         LOG("Set Image Receiver options capacity(%{public}d) failed: err = %{public}d.",
65             capacity, ret);
66         return ret;
67     }
68     ret = VerifyImageReceiverOptions(options);
69     if (ret != IMAGE_SUCCESS) {
70         OH_ImageReceiverOptions_Release(options);
71         LOG("Set Image Receiver options capacity(%{public}d) failed: err = %{public}d.",
72             capacity, ret);
73         return ret;
74     }
75     ret = OH_ImageReceiverNative_Create(options, &imageReceiver_);
76     if (ret != IMAGE_SUCCESS) {
77         OH_ImageReceiverOptions_Release(options);
78         LOG("Create Image Receiver failed: err = %{public}d.", ret);
79         return ret;
80     }
81     OH_ImageReceiverOptions_Release(options);
82     LOG("CreateImageReceiver end.");
83     return ret;
84 }
85 
DestroyImageReceiver()86 Image_ErrorCode ImageReceiverModuleTest::DestroyImageReceiver()
87 {
88     LOG("DestroyImageReceiver enter.");
89     Image_ErrorCode ret = OH_ImageReceiverNative_Release(imageReceiver_);
90     if (ret != IMAGE_SUCCESS) {
91         LOG("Release Image Receiver failed: err = %{public}d.", ret);
92         return ret;
93     }
94     imageReceiver_ = nullptr;
95     LOG("DestroyImageReceiver end.");
96     return ret;
97 }
98 
GetImageReceiverSurfaceId(uint64_t * surfaceId)99 Image_ErrorCode ImageReceiverModuleTest::GetImageReceiverSurfaceId(uint64_t *surfaceId)
100 {
101     LOG("GetImageReceiverSurfaceId enter.");
102     Image_ErrorCode ret = OH_ImageReceiverNative_GetReceivingSurfaceId(imageReceiver_, surfaceId);
103     if (ret != IMAGE_SUCCESS) {
104         LOG("Get Image Receiver SurfaceId failed: err = %{public}d.", ret);
105         return ret;
106     }
107     LOG("GetImageReceiverSurfaceId end.");
108     return ret;
109 }
110 
GetImageReceiverLatestImage(OH_ImageNative ** image)111 Image_ErrorCode ImageReceiverModuleTest::GetImageReceiverLatestImage(OH_ImageNative **image)
112 {
113     LOG("GetImageReceiverLatestImage enter.");
114     Image_ErrorCode ret = OH_ImageReceiverNative_ReadLatestImage(imageReceiver_, image);
115     if (ret != IMAGE_SUCCESS) {
116         LOG("Read Image Receiver Latest Image failed: err = %{public}d.", ret);
117         return ret;
118     }
119     LOG("GetImageReceiverLatestImage end.");
120 
121     int64_t timestamp = 0;
122     ret = OH_ImageNative_GetTimestamp(*image, &timestamp);
123     if (ret != IMAGE_SUCCESS) {
124         LOG("Get imageReceiverLatestImage failed : timestamp is : %{public}lld., err = %{public}d.",
125             static_cast<long long>(timestamp), ret);
126         return ret;
127     }
128     LOG("GetImageReceiverLatestImage %{public}s timestamp is : %{public}lld.", __func__,
129         static_cast<long long>(timestamp));
130     return ret;
131 }
132 
GetImageReceiverNextImage(OH_ImageNative ** image)133 Image_ErrorCode ImageReceiverModuleTest::GetImageReceiverNextImage(OH_ImageNative **image)
134 {
135     LOG("GetImageReceiverNextImage enter.");
136     Image_ErrorCode ret = OH_ImageReceiverNative_ReadNextImage(imageReceiver_, image);
137     if (ret != IMAGE_SUCCESS) {
138         LOG("Read Image Receiver Next Image failed: err = %{public}d.", ret);
139         return ret;
140     }
141     LOG("GetImageReceiverNextImage end.");
142 
143     int64_t timestamp = 0;
144     ret = OH_ImageNative_GetTimestamp(*image, &timestamp);
145     if (ret != IMAGE_SUCCESS) {
146         LOG("Get imageReceiverNextImage failed : timestamp is : %{public}lld., err = %{public}d.",
147             static_cast<long long>(timestamp), ret);
148         return ret;
149     }
150     LOG("GetImageReceiverNextImage %{public}s timestamp is : %{public}lld.", __func__,
151         static_cast<long long>(timestamp));
152     return ret;
153 }
154 
RegisterImageReceiverListener(OH_ImageReceiver_OnCallback callback)155 Image_ErrorCode ImageReceiverModuleTest::RegisterImageReceiverListener(OH_ImageReceiver_OnCallback callback)
156 {
157     LOG("RegisterImageReceiverListener enter.");
158     Image_ErrorCode ret = OH_ImageReceiverNative_On(imageReceiver_, callback);
159     if (ret != IMAGE_SUCCESS) {
160         LOG("Register Image Receiver on callback failed: err = %{public}d.", ret);
161         return ret;
162     }
163     LOG("RegisterImageReceiverListener end.");
164     return ret;
165 }
166 
UnregisterImageReceiverListener()167 Image_ErrorCode ImageReceiverModuleTest::UnregisterImageReceiverListener()
168 {
169     LOG("UnregisterImageReceiverListener enter.");
170     Image_ErrorCode ret = OH_ImageReceiverNative_Off(imageReceiver_);
171     if (ret != IMAGE_SUCCESS) {
172         LOG("Register Image Receiver on callback failed: err = %{public}d.", ret);
173         return ret;
174     }
175     LOG("UnregisterImageReceiverListener end.");
176     return ret;
177 }
178 
VerifyImageReceiver()179 Image_ErrorCode ImageReceiverModuleTest::VerifyImageReceiver()
180 {
181     LOG("VerifyImageReceiver enter.");
182     Image_ErrorCode ret = IMAGE_SUCCESS;
183 
184     Image_Size size = { 0 };
185     ret = OH_ImageReceiverNative_GetSize(imageReceiver_, &size);
186     if (ret != IMAGE_SUCCESS) {
187         LOG("Get Image Receiver size failed: err = %{public}d.", ret);
188         return ret;
189     }
190     LOG("Image Receiver size = %{public}dx%{public}d.", size.width, size.height);
191     if (size.width != width_ || size.height != height_) {
192         LOG("Get Image Receiver options size value is wrong: "
193             "expect(%{public}dx%{public}d) actual(%{public}dx%{public}d).",
194             width_, height_, size.width, size.height);
195         return IMAGE_BAD_PARAMETER;
196     }
197 
198     int32_t capacity = 0;
199     ret = OH_ImageReceiverNative_GetCapacity(imageReceiver_, &capacity);
200     if (ret != IMAGE_SUCCESS) {
201         LOG("Get Image Receiver capacity failed: err = %{public}d.", ret);
202         return ret;
203     }
204     LOG("Image Receiver capacity = %{public}d.", capacity);
205     if (capacity != capacity_) {
206         LOG("Get Image Receiver capacity value is wrong: "
207             "expect(%{public}d) actual(%{public}d).",
208             capacity_, capacity);
209         return IMAGE_BAD_PARAMETER;
210     }
211 
212     uint64_t id = 0;
213     ret = OH_ImageReceiverNative_GetReceivingSurfaceId(imageReceiver_, &id);
214     if (ret != IMAGE_SUCCESS) {
215         LOG("Get Image Receiver SurfaceId failed: err = %{public}d.", ret);
216         return ret;
217     }
218     LOG("Image Receiver surfaceId = %{public}llu.", static_cast<unsigned long long>(id));
219     if (id == 0) {
220         LOG("Get Image Receiver SurfaceId is zero.");
221         return IMAGE_BAD_PARAMETER;
222     }
223 
224     LOG("VerifyImageReceiver end.");
225     return ret;
226 }
227 
DumpImageInfo(OH_ImageNative * image)228 Image_ErrorCode ImageReceiverModuleTest::DumpImageInfo(OH_ImageNative *image)
229 {
230     LOG("DumpImageInfo enter.");
231     Image_Size size = { 0 };
232     std::vector<uint32_t> types;
233 
234     if (GetImageSize(image, &size) != IMAGE_SUCCESS ||
235         GetImageComponentTypes(image, &types) != IMAGE_SUCCESS) {
236         LOG("Get Image property failed");
237         return IMAGE_BAD_PARAMETER;
238     }
239 
240     LOG("=== Start dump image(%{public}p) ===.", image);
241     LOG("Get %{public}lu components.", static_cast<unsigned long>(types.size()));
242     for (uint32_t i = 0; i < types.size(); i++) {
243         OH_NativeBuffer* nativeBuffer = nullptr;
244         size_t bufferSize = 0;
245         int32_t rowStride = 0;
246         int32_t pixelStride = 0;
247         if (GetImageByteBuffer(image, types[i], &nativeBuffer) != IMAGE_SUCCESS ||
248             GetImageBufferSize(image, types[i], &bufferSize) != IMAGE_SUCCESS ||
249             GetImageRowStride(image, types[i], &rowStride) != IMAGE_SUCCESS ||
250             GetImagePixelStride(image, types[i], &pixelStride) != IMAGE_SUCCESS) {
251             LOG("Get Image property failed.");
252             return IMAGE_BAD_PARAMETER;
253         }
254         LOG("Image component(%{public}d): ByteBuffer(%{public}p) Size(%{public}lu "
255             "Stride(row %{public}d pixel %{public}d)).",
256             types[i], nativeBuffer, static_cast<unsigned long>(bufferSize), rowStride, pixelStride);
257     }
258     LOG("=== End dump image(%{public}p) ===.", image);
259 
260     LOG("DumpImageInfo end.");
261     return IMAGE_SUCCESS;
262 }
263 
ReleaseImage(OH_ImageNative * image)264 Image_ErrorCode ImageReceiverModuleTest::ReleaseImage(OH_ImageNative *image)
265 {
266     LOG("ReleaseImage enter.");
267     Image_ErrorCode ret = OH_ImageNative_Release(image);
268     if (ret != IMAGE_SUCCESS) {
269         LOG("Release Image failed: err = %{public}d.", ret);
270         return ret;
271     }
272     LOG("ReleaseImage end.");
273     return ret;
274 }
275 
ReuseSameRecevier(uint32_t width,uint32_t height,uint32_t capacity)276 bool ImageReceiverModuleTest::ReuseSameRecevier(uint32_t width, uint32_t height, uint32_t capacity)
277 {
278     if (width == width_ && height == height_ && capacity == capacity_) {
279         return true;
280     }
281     return false;
282 }
283 
VerifyImageReceiverOptions(OH_ImageReceiverOptions * options)284 Image_ErrorCode ImageReceiverModuleTest::VerifyImageReceiverOptions(OH_ImageReceiverOptions *options)
285 {
286     LOG("VerifyImageReceiverOptions enter.");
287     Image_ErrorCode ret = IMAGE_SUCCESS;
288 
289     Image_Size size = { 0 };
290     ret = OH_ImageReceiverOptions_GetSize(options, &size);
291     if (ret != IMAGE_SUCCESS) {
292         LOG("Get Image Receiver options size failed: err = %{public}d.", ret);
293         return ret;
294     }
295     LOG("Image Receiver options size = %{public}dx%{public}d.", size.width, size.height);
296     if (size.width != width_ || size.height != height_) {
297         LOG("Get Image Receiver options size value is wrong: "
298             "expect(%{public}dx%{public}d) actual(%{public}dx%{public}d).",
299             width_, height_, size.width, size.height);
300         return IMAGE_BAD_PARAMETER;
301     }
302 
303     int32_t capacity = 0;
304     ret = OH_ImageReceiverOptions_GetCapacity(options, &capacity);
305     if (ret != IMAGE_SUCCESS) {
306         LOG("Get Image Receiver options capacity failed: err = %{public}d.", ret);
307         return ret;
308     }
309     LOG("Image Receiver options capacity = %{public}d.", capacity);
310     if (capacity != capacity_) {
311         LOG("Get Image Receiver options capacity value is wrong: "
312             "expect(%{public}d) actual(%{public}d).",
313             capacity_, capacity);
314         return IMAGE_BAD_PARAMETER;
315     }
316 
317     LOG("VerifyImageReceiverOptions end.");
318     return ret;
319 }
320 
GetImageSize(OH_ImageNative * image,Image_Size * size)321 Image_ErrorCode ImageReceiverModuleTest::GetImageSize(OH_ImageNative *image, Image_Size *size)
322 {
323     Image_ErrorCode ret = OH_ImageNative_GetImageSize(image, size);
324     if (ret != IMAGE_SUCCESS) {
325         LOG("Get Image size failed: err = %{public}d.", ret);
326         return ret;
327     }
328     return ret;
329 }
330 
GetImageComponentTypes(OH_ImageNative * image,std::vector<uint32_t> * types)331 Image_ErrorCode ImageReceiverModuleTest::GetImageComponentTypes(OH_ImageNative *image, std::vector<uint32_t> *types)
332 {
333     if (types == nullptr) {
334         LOG("Types is nullptr.");
335         return IMAGE_BAD_PARAMETER;
336     }
337 
338     size_t typeSize = 0;
339     Image_ErrorCode ret = OH_ImageNative_GetComponentTypes(image, nullptr, &typeSize);
340     if (ret != IMAGE_SUCCESS) {
341         LOG("Get Image component types failed: err = %{public}d.", ret);
342         return ret;
343     }
344 
345     uint32_t *typesArr = nullptr;
346     if (typeSize <= 0) {
347         return IMAGE_BAD_PARAMETER;
348     } else {
349         typesArr = new uint32_t[typeSize];
350     }
351 
352     if (typesArr == nullptr) {
353         return IMAGE_ALLOC_FAILED;
354     }
355 
356     ret = OH_ImageNative_GetComponentTypes(image, &typesArr, &typeSize);
357     if (ret != IMAGE_SUCCESS) {
358         delete [] typesArr;
359         LOG("Get Image component types failed: err = %{public}d.", ret);
360         return ret;
361     }
362 
363     types->resize(typeSize);
364     for (uint32_t i = 0; i < typeSize; i++) {
365         types->push_back(typesArr[i]);
366     }
367 
368     return ret;
369 }
370 
GetImageByteBuffer(OH_ImageNative * image,int32_t type,OH_NativeBuffer ** nativeBuffer)371 Image_ErrorCode ImageReceiverModuleTest::GetImageByteBuffer(OH_ImageNative *image, int32_t type,
372                                                             OH_NativeBuffer **nativeBuffer)
373 {
374     Image_ErrorCode ret = OH_ImageNative_GetByteBuffer(image, type, nativeBuffer);
375     if (ret != IMAGE_SUCCESS) {
376         LOG("Get Image ByteBuffer failed: err = %{public}d.", ret);
377         return ret;
378     }
379     return ret;
380 }
381 
GetImageBufferSize(OH_ImageNative * image,int32_t type,size_t * size)382 Image_ErrorCode ImageReceiverModuleTest::GetImageBufferSize(OH_ImageNative *image, int32_t type, size_t *size)
383 {
384     Image_ErrorCode ret = OH_ImageNative_GetBufferSize(image, type, size);
385     if (ret != IMAGE_SUCCESS) {
386         LOG("Get Image buffer size failed: err = %{public}d.", ret);
387         return ret;
388     }
389     return ret;
390 }
391 
GetImageRowStride(OH_ImageNative * image,int32_t type,int32_t * rowStride)392 Image_ErrorCode ImageReceiverModuleTest::GetImageRowStride(OH_ImageNative *image, int32_t type, int32_t *rowStride)
393 {
394     Image_ErrorCode ret = OH_ImageNative_GetRowStride(image, type, rowStride);
395     if (ret != IMAGE_SUCCESS) {
396         LOG("Get Image buffer rowStride failed: err = %{public}d.", ret);
397         return ret;
398     }
399     return ret;
400 }
401 
GetImagePixelStride(OH_ImageNative * image,int32_t type,int32_t * pixelStride)402 Image_ErrorCode ImageReceiverModuleTest::GetImagePixelStride(OH_ImageNative *image, int32_t type, int32_t *pixelStride)
403 {
404     Image_ErrorCode ret = OH_ImageNative_GetPixelStride(image, type, pixelStride);
405     if (ret != IMAGE_SUCCESS) {
406         LOG("Get Image buffer pixelStride failed: err = %{public}d.", ret);
407         return ret;
408     }
409     return ret;
410 }
411