1 /*
2 * Copyright (c) 2022-2023 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, Hardware
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 "gtest/gtest.h"
17
18 #ifdef RS_ENABLE_GPU
19 #include "image_source.h"
20 #include "pixel_map.h"
21 #endif
22
23 #include "draw/brush.h"
24 #include "effect/color_space.h"
25 #include "drawing/engine_adapter/impl_factory.h"
26 #include "image/bitmap.h"
27 #include "image/gpu_context.h"
28 #include "image/image.h"
29 #include "image/yuv_info.h"
30 #include "image/picture.h"
31 #include "render_context/render_context.h"
32 #include "utils/matrix.h"
33 #include "utils/size.h"
34
35 #ifdef RS_ENABLE_VK
36 #include "platform/ohos/backend/rs_vulkan_context.h"
37 #endif
38
39 using namespace testing;
40 using namespace testing::ext;
41
42 namespace OHOS {
43 namespace Rosen {
44 namespace Drawing {
45 class ImageTest : public testing::Test {
46 public:
47 static void SetUpTestCase();
48 static void TearDownTestCase();
49 void SetUp() override;
50 void TearDown() override;
51 };
52
SetUpTestCase()53 void ImageTest::SetUpTestCase()
54 {
55 #ifdef RS_ENABLE_VK
56 RsVulkanContext::SetRecyclable(false);
57 #endif
58 }
TearDownTestCase()59 void ImageTest::TearDownTestCase() {}
SetUp()60 void ImageTest::SetUp() {}
TearDown()61 void ImageTest::TearDown() {}
62
63 // jpg
64 static unsigned char g_testJpgBuffer[] = {
65 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01,
66 0x01, 0x01, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43,
67 0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02,
68 0x02, 0x02, 0x02, 0x03, 0x05, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0x04,
69 0x04, 0x03, 0x05, 0x07, 0x06, 0x07, 0x07, 0x07, 0x06, 0x07, 0x07, 0x08,
70 0x09, 0x0b, 0x09, 0x08, 0x08, 0x0a, 0x08, 0x07, 0x07, 0x0a, 0x0d, 0x0a,
71 0x0a, 0x0b, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x09, 0x0e, 0x0f, 0x0d, 0x0c,
72 0x0e, 0x0b, 0x0c, 0x0c, 0x0c, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x02, 0x02,
73 0x02, 0x03, 0x03, 0x03, 0x06, 0x03, 0x03, 0x06, 0x0c, 0x08, 0x07, 0x08,
74 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
75 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
76 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
77 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
78 0x0c, 0x0c, 0xff, 0xc0, 0x00, 0x11, 0x08, 0x00, 0xe2, 0x01, 0xd8, 0x03,
79 0x01, 0x22, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x00,
80 0x1f, 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
81 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
82 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x10, 0x00,
83 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00,
84 0x00, 0x01, 0x7d, 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21,
85 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81,
86 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24,
87 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25,
88 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a,
89 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56,
90 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a,
91 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86,
92 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
93 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3,
94 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6,
95 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
96 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1,
97 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xc4, 0x00,
98 0x1f, 0x01, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
99 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
100 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x11, 0x00,
101 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04, 0x04, 0x00,
102 0x01, 0x02, 0x77, 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31,
103 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08,
104 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15,
105 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18,
106 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39,
107 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55,
108 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
109 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84,
110 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
111 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa,
112 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4,
113 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
114 0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
115 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xda, 0x00,
116 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0xfd,
117 0x10, 0xa2, 0x8a, 0x2b, 0xfc, 0x63, 0x3f, 0xaa, 0x02, 0x8a, 0x28, 0xa0,
118 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
119 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
120 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
121 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
122 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
123 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
124 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
125 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
126 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
127 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
128 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
129 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
130 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
131 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
132 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
133 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
134 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
135 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
136 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
137 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
138 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
139 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
140 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
141 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
142 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
143 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
144 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
145 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
146 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
147 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
148 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
149 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
150 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
151 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
152 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
153 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
154 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
155 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
156 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
157 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
158 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
159 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
160 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
161 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
162 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
163 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
164 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
165 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
166 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
167 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
168 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
169 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
170 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
171 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
172 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
173 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
174 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
175 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
176 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
177 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
178 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
179 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
180 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
181 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
182 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
183 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
184 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
185 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
186 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
187 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
188 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
189 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
190 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
191 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
192 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
193 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
194 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
195 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
196 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
197 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
198 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
199 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
200 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
201 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
202 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
203 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
204 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
205 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
206 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
207 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
208 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
209 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
210 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
211 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
212 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
213 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
214 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
215 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
216 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
217 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
218 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
219 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
220 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
221 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
222 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
223 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
224 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
225 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
226 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
227 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
228 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
229 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
230 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
231 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
232 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
233 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
234 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
235 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
236 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
237 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
238 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
239 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
240 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
241 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
242 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
243 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
244 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
245 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
246 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
247 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
248 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
249 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
250 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
251 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
252 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
253 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
254 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
255 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
256 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
257 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
258 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
259 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
260 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
261 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
262 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
263 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
264 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
265 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
266 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0,
267 0x02, 0x8a, 0x28, 0xa0, 0x0f, 0xff, 0xd9
268 };
269
270 static unsigned int g_testJpgLength = 2431;
271
272 /**
273 * @tc.name: CreateAndDestroy001
274 * @tc.desc:
275 * @tc.type: FUNC
276 * @tc.require:AR000GGNV3
277 * @tc.author:
278 */
279 HWTEST_F(ImageTest, CreateAndDestroy001, TestSize.Level1)
280 {
281 // The best way to create Image.
282 std::unique_ptr<Image> image = std::make_unique<Image>();
283 ASSERT_TRUE(image != nullptr);
284 }
285
286 /**
287 * @tc.name: BuildFromBitmap001
288 * @tc.desc:
289 * @tc.type: FUNC
290 * @tc.require:AR000GGNV3
291 * @tc.author:
292 */
293 HWTEST_F(ImageTest, BuildFromBitmap001, TestSize.Level1)
294 {
295 std::unique_ptr<Image> image = std::make_unique<Image>();
296 ASSERT_TRUE(image != nullptr);
297 Bitmap bitmap;
298 image->BuildFromBitmap(bitmap);
299 }
300
301 /**
302 * @tc.name: ImageGetWidthTest001
303 * @tc.desc:
304 * @tc.type: FUNC
305 * @tc.require:AR000GGNV3
306 * @tc.author:
307 */
308 HWTEST_F(ImageTest, ImageGetWidthTest001, TestSize.Level1)
309 {
310 Bitmap bitmap;
311 BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
312 bitmap.Build(10, 10, bitmapFormat);
313 Image image;
314 ASSERT_EQ(0, image.GetWidth());
315 image.BuildFromBitmap(bitmap);
316 ASSERT_EQ(10, image.GetWidth());
317 }
318
319 /**
320 * @tc.name: ImageGetWidthTest002
321 * @tc.desc:
322 * @tc.type: FUNC
323 * @tc.require:AR000GGNV3
324 * @tc.author:
325 */
326 HWTEST_F(ImageTest, ImageGetWidthTest002, TestSize.Level1)
327 {
328 Bitmap bitmap;
329 BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
330 bitmap.Build(15, 15, bitmapFormat);
331 Image image;
332 ASSERT_EQ(0, image.GetWidth());
333 image.BuildFromBitmap(bitmap);
334 ASSERT_EQ(15, image.GetWidth());
335 }
336
337 /**
338 * @tc.name: ImageGetHeightTest001
339 * @tc.desc:
340 * @tc.type: FUNC
341 * @tc.require:AR000GGNV3
342 * @tc.author:
343 */
344 HWTEST_F(ImageTest, ImageGetHeightTest001, TestSize.Level1)
345 {
346 Bitmap bitmap;
347 BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
348 bitmap.Build(10, 10, bitmapFormat);
349 Image image;
350 image.BuildFromBitmap(bitmap);
351 ASSERT_EQ(10, image.GetHeight());
352 }
353
354 /**
355 * @tc.name: ImageGetHeightTest002
356 * @tc.desc:
357 * @tc.type: FUNC
358 * @tc.require:AR000GGNV3
359 * @tc.author:
360 */
361 HWTEST_F(ImageTest, ImageGetHeightTest002, TestSize.Level1)
362 {
363 Bitmap bitmap;
364 BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
365 bitmap.Build(15, 15, bitmapFormat);
366 Image image;
367 image.BuildFromBitmap(bitmap);
368 ASSERT_EQ(15, image.GetHeight());
369 }
370
371 /**
372 * @tc.name: ImageGetUniqueIDTest001
373 * @tc.desc: test for geting the unique Id of Image.
374 * @tc.type: FUNC
375 * @tc.require: I70OWN
376 */
377 HWTEST_F(ImageTest, ImageGetUniqueIDTest001, TestSize.Level1)
378 {
379 // GetUniqueID will change all the time
380 Image image;
381 ASSERT_EQ(0, image.GetUniqueID());
382 }
383
384 /**
385 * @tc.name: ReadPixelsTest001
386 * @tc.desc: test for Coping a Rect of pixels from Image to Bitmap.
387 * @tc.type: FUNC
388 * @tc.require: I70OWN
389 */
390 HWTEST_F(ImageTest, ReadPixelsTest001, TestSize.Level1)
391 {
392 Bitmap bitmap;
393 Image image;
394 int x = 0;
395 int y = 0;
396 EXPECT_FALSE(image.ReadPixels(bitmap, x, y));
397 }
398
399 /**
400 * @tc.name: ReadPixelsTest002
401 * @tc.desc: test for Coping a Rect of pixels from Image to Bitmap.
402 * @tc.type: FUNC
403 * @tc.require: I70OWN
404 */
405 HWTEST_F(ImageTest, ReadPixelsTest002, TestSize.Level1)
406 {
407 Bitmap bitmap;
408 BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
409 bitmap.Build(15, 15, bitmapFormat);
410 Image image;
411 image.BuildFromBitmap(bitmap);
412 int x = 0;
413 int y = 0;
414 EXPECT_TRUE(image.ReadPixels(bitmap, x, y));
415 }
416
417 /**
418 * @tc.name: IsTextureBackedTest001
419 * @tc.desc: test for IsTextureBacked function.
420 * @tc.type: FUNC
421 * @tc.require: I70OWN
422 */
423 HWTEST_F(ImageTest, IsTextureBackedTest001, TestSize.Level1)
424 {
425 Bitmap bitmap;
426 BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
427 bitmap.Build(15, 15, bitmapFormat);
428 Image image;
429 image.BuildFromBitmap(bitmap);
430 EXPECT_FALSE(image.IsTextureBacked());
431 }
432
433 /**
434 * @tc.name: SetHeadroom001
435 * @tc.desc: test for setting headroom for Image.
436 * @tc.type: FUNC
437 * @tc.require: I70OWN
438 */
439 HWTEST_F(ImageTest, SetHeadroom001, TestSize.Level1)
440 {
441 std::unique_ptr<Image> image = std::make_unique<Image>();
442 ASSERT_TRUE(image != nullptr);
443 image->SetHeadroom(2.0f);
444 ASSERT_EQ(image->GetHeadroom(), 1.0f);
445 }
446
447 /**
448 * @tc.name: GetHeadroom001
449 * @tc.desc: test for getting headroom from Image.
450 * @tc.type: FUNC
451 * @tc.require: I70OWN
452 */
453 HWTEST_F(ImageTest, GetHeadroom001, TestSize.Level1)
454 {
455 std::unique_ptr<Image> image = std::make_unique<Image>();
456 ASSERT_TRUE(image != nullptr);
457 ASSERT_EQ(image->GetHeadroom(), 1.0f);
458 }
459
460 #ifdef RS_ENABLE_GPU
461 /**
462 * @tc.name: BuildFromCompressedTest001
463 * @tc.desc: test for creating a GPU-backed Image from compressed data.
464 * @tc.type: FUNC
465 * @tc.require: I70OWN
466 */
467 HWTEST_F(ImageTest, BuildFromCompressedTest001, TestSize.Level1)
468 {
469 GPUContext gpuContext;
470 const std::shared_ptr<Data> data = nullptr;
471 std::unique_ptr<Image> image = std::make_unique<Image>();
472 ASSERT_TRUE(image != nullptr);
473 image->BuildFromCompressed(gpuContext, data, 15, 15, CompressedType::ASTC_RGBA8_4x4);
474 }
475
476 /**
477 * @tc.name: BuildFromCompressedTest002
478 * @tc.desc: test for creating a GPU-backed Image from compressed data.
479 * @tc.type: FUNC
480 * @tc.require: I70OWN
481 */
482 HWTEST_F(ImageTest, BuildFromCompressedTest002, TestSize.Level1)
483 {
484 GPUContext gpuContext;
485 std::shared_ptr<Data> data = std::make_shared<Data>();
486 ASSERT_TRUE(data != nullptr);
487 std::unique_ptr<Image> image = std::make_unique<Image>();
488 ASSERT_TRUE(image != nullptr);
489 image->BuildFromCompressed(gpuContext, data, 15, 15, CompressedType::ASTC_RGBA8_4x4);
490 }
491
492 /**
493 * @tc.name: BuildFromCompressedTest003
494 * @tc.desc: test for creating a GPU-backed Image from compressed data.
495 * @tc.type: FUNC
496 * @tc.require: I70OWN
497 */
498 HWTEST_F(ImageTest, BuildFromCompressedTest003, TestSize.Level1)
499 {
500 GPUContext gpuContext;
501 std::shared_ptr<Data> data = std::make_shared<Data>();
502 ASSERT_TRUE(data != nullptr);
503 std::unique_ptr<Image> image = std::make_unique<Image>();
504 ASSERT_TRUE(image != nullptr);
505 image->BuildFromCompressed(gpuContext, data, 15, 15, CompressedType::ETC2_RGB8_UNORM);
506 }
507
508 /**
509 * @tc.name: BuildFromBitmapTest001
510 * @tc.desc: test for creating Image from Bitmap. Image is uploaded to GPU back-end using context.
511 * @tc.type: FUNC
512 * @tc.require: I70OWN
513 */
514 HWTEST_F(ImageTest, BuildFromBitmapTest001, TestSize.Level1)
515 {
516 GPUContext gpuContext;
517 Bitmap bitmap;
518 BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
519 bitmap.Build(15, 15, bitmapFormat);
520 std::unique_ptr<Image> image = std::make_unique<Image>();
521 ASSERT_TRUE(image != nullptr);
522 image->BuildFromBitmap(gpuContext, bitmap);
523 }
524
525 /**
526 * @tc.name: BuildFromTextureTest001
527 * @tc.desc: test for creating Image from GPU texture associated with context.
528 * @tc.type: FUNC
529 * @tc.require: I70OWN
530 */
531 HWTEST_F(ImageTest, BuildFromTextureTest001, TestSize.Level1)
532 {
533 GPUContext gpuContext;
534 TextureInfo info;
535 info.SetWidth(10);
536 BitmapFormat bitmapFormat { COLORTYPE_UNKNOWN, ALPHATYPE_UNKNOWN };
537 auto colorSpace = std::make_shared<ColorSpace>(ColorSpace::ColorSpaceType::NO_TYPE);
538 std::unique_ptr<Image> image = std::make_unique<Image>();
539 ASSERT_TRUE(image != nullptr);
540 image->BuildFromTexture(gpuContext, info, TextureOrigin::TOP_LEFT, bitmapFormat, nullptr);
541
542 bitmapFormat = { COLORTYPE_ALPHA_8, ALPHATYPE_OPAQUE };
543 image->BuildFromTexture(gpuContext, info, TextureOrigin::TOP_LEFT, bitmapFormat, colorSpace);
544
545 bitmapFormat = { COLORTYPE_RGB_565, ALPHATYPE_PREMUL };
546 image->BuildFromTexture(gpuContext, info, TextureOrigin::BOTTOM_LEFT, bitmapFormat, colorSpace);
547
548 bitmapFormat = { COLORTYPE_ARGB_4444, ALPHATYPE_UNPREMUL };
549 image->BuildFromTexture(gpuContext, info, TextureOrigin::BOTTOM_LEFT, bitmapFormat, colorSpace);
550
551 bitmapFormat.colorType = COLORTYPE_RGBA_8888;
552 bitmapFormat.alphaType = static_cast<AlphaType>(-1);
553 image->BuildFromTexture(gpuContext, info, TextureOrigin::BOTTOM_LEFT, bitmapFormat, colorSpace);
554
555 bitmapFormat.colorType = COLORTYPE_BGRA_8888;
556 image->BuildFromTexture(gpuContext, info, TextureOrigin::BOTTOM_LEFT, bitmapFormat, colorSpace);
557
558 bitmapFormat.colorType = COLORTYPE_N32;
559 image->BuildFromTexture(gpuContext, info, TextureOrigin::BOTTOM_LEFT, bitmapFormat, colorSpace);
560
561 bitmapFormat.colorType = static_cast<ColorType>(-1);
562 image->BuildFromTexture(gpuContext, info, static_cast<TextureOrigin>(-1), bitmapFormat, colorSpace);
563 }
564
565 /**
566 * @tc.name: SerializeAndDeserializeTest001
567 * @tc.desc: test for serialize and deserialize Image.
568 * @tc.type: FUNC
569 * @tc.require: I782P9
570 */
571 HWTEST_F(ImageTest, SerializeAndDeserializeTest001, TestSize.Level1)
572 {
573 auto image = std::make_shared<Image>();
574 auto data = image->Serialize();
575 #ifdef ROSEN_OHOS
576 ASSERT_TRUE(data == nullptr);
577 EXPECT_FALSE(image->Deserialize(data));
578
579 BitmapFormat bitmapFormat { COLORTYPE_RGBA_8888, ALPHATYPE_OPAQUE };
580 auto bitmap = std::make_shared<Bitmap>();
581 EXPECT_TRUE(bitmap->Build(10, 10, bitmapFormat));
582 image->BuildFromBitmap(*bitmap);
583 data = image->Serialize();
584 ASSERT_TRUE(data != nullptr);
585 EXPECT_TRUE(image->Deserialize(data));
586 #else
587 ASSERT_TRUE(data == nullptr);
588 EXPECT_FALSE(image->Deserialize(data));
589 #endif
590 }
591
592 /**
593 * @tc.name: MakeFromYUVAPixmapsTest001
594 * @tc.desc: test for MakeFromYUVAPixmapsTest failed with nullptr gpuContext.
595 * @tc.type: FUNC
596 * @tc.require: I782P9
597 */
598 HWTEST_F(ImageTest, MakeFromYUVAPixmapsTest001, TestSize.Level1)
599 {
600 GPUContext gpuContext;
601 YUVInfo info(100, 100, YUVInfo::PlaneConfig::Y_UV, YUVInfo::SubSampling::K420,
602 YUVInfo::YUVColorSpace::JPEG_FULL_YUVCOLORSPACE,
603 YUVInfo::YUVDataType::UNORM_8);
604 auto image = Image::MakeFromYUVAPixmaps(gpuContext, info, nullptr);
605 EXPECT_TRUE(image == nullptr);
606 }
607
608 /**
609 * @tc.name: MakeFromYUVAPixmapsTest002
610 * @tc.desc: test for MakeFromYUVAPixmapsTest failed with nullptr memory.
611 * @tc.type: FUNC
612 * @tc.require: I782P9
613 */
614 HWTEST_F(ImageTest, MakeFromYUVAPixmapsTest002, TestSize.Level1)
615 {
616 auto renderContext = std::make_shared<RenderContext>();
617 renderContext->InitializeEglContext();
618 renderContext->SetUpGpuContext();
619 auto gpuContext = renderContext->GetSharedDrGPUContext();
620 ASSERT_NE(gpuContext, nullptr);
621
622 YUVInfo info(100, 100, YUVInfo::PlaneConfig::Y_UV, YUVInfo::SubSampling::K420,
623 YUVInfo::YUVColorSpace::JPEG_FULL_YUVCOLORSPACE,
624 YUVInfo::YUVDataType::UNORM_8);
625 auto image = Image::MakeFromYUVAPixmaps(*gpuContext, info, nullptr);
626 EXPECT_TRUE(image == nullptr);
627 gpuContext = nullptr;
628 }
629
630 /**
631 * @tc.name: MakeFromYUVAPixmapsTest003
632 * @tc.desc: test for MakeFromYUVAPixmapsTest success for YUV NV21.
633 * @tc.type: FUNC
634 * @tc.require: I782P9
635 */
636 HWTEST_F(ImageTest, MakeFromYUVAPixmapsTest003, TestSize.Level1)
637 {
638 auto renderContext = std::make_shared<RenderContext>();
639 renderContext->InitializeEglContext();
640 renderContext->SetUpGpuContext();
641 auto gpuContext = renderContext->GetSharedDrGPUContext();
642 ASSERT_NE(gpuContext, nullptr);
643
644 size_t bufferSize = g_testJpgLength;
645 uint8_t *buffer = g_testJpgBuffer;
646 uint32_t errorCode = 0;
647 Media::SourceOptions opts;
648 opts.formatHint = "image/jpeg";
649 std::unique_ptr<Media::ImageSource> imageSource = Media::ImageSource::CreateImageSource(buffer,
650 bufferSize, opts, errorCode);
651 ASSERT_NE(imageSource.get(), nullptr);
652 Media::DecodeOptions decodeOpts;
653 decodeOpts.desiredPixelFormat = Media::PixelFormat::NV21;
654 std::unique_ptr<Media::PixelMap> pixelMap = imageSource->CreatePixelMap(decodeOpts, errorCode);
655 ASSERT_NE(pixelMap.get(), nullptr);
656
657 YUVInfo info(300, 300, YUVInfo::PlaneConfig::Y_VU, YUVInfo::SubSampling::K420,
658 YUVInfo::YUVColorSpace::JPEG_FULL_YUVCOLORSPACE,
659 YUVInfo::YUVDataType::UNORM_8);
660 auto image = Image::MakeFromYUVAPixmaps(*gpuContext, info,
661 const_cast<void *>(reinterpret_cast<const void*>(pixelMap->GetPixels())));
662 EXPECT_TRUE(image != nullptr);
663 gpuContext = nullptr;
664 }
665
666 /**
667 * @tc.name: MakeFromYUVAPixmapsTest004
668 * @tc.desc: test for MakeFromYUVAPixmapsTest success for YUV NV12.
669 * @tc.type: FUNC
670 * @tc.require: I782P9
671 */
672 HWTEST_F(ImageTest, MakeFromYUVAPixmapsTest004, TestSize.Level1)
673 {
674 auto renderContext = std::make_shared<RenderContext>();
675 renderContext->InitializeEglContext();
676 renderContext->SetUpGpuContext();
677 auto gpuContext = renderContext->GetSharedDrGPUContext();
678 ASSERT_NE(gpuContext, nullptr);
679
680 size_t bufferSize = g_testJpgLength;
681 uint8_t *buffer = g_testJpgBuffer;
682 uint32_t errorCode = 0;
683 Media::SourceOptions opts;
684 opts.formatHint = "image/jpeg";
685 std::unique_ptr<Media::ImageSource> imageSource = Media::ImageSource::CreateImageSource(buffer,
686 bufferSize, opts, errorCode);
687 ASSERT_NE(imageSource.get(), nullptr);
688 Media::DecodeOptions decodeOpts;
689 decodeOpts.desiredPixelFormat = Media::PixelFormat::NV12;
690 std::unique_ptr<Media::PixelMap> pixelMap = imageSource->CreatePixelMap(decodeOpts, errorCode);
691 ASSERT_NE(pixelMap.get(), nullptr);
692
693 YUVInfo info(300, 300, YUVInfo::PlaneConfig::Y_UV, YUVInfo::SubSampling::K420,
694 YUVInfo::YUVColorSpace::JPEG_FULL_YUVCOLORSPACE,
695 YUVInfo::YUVDataType::UNORM_8);
696 auto image = Image::MakeFromYUVAPixmaps(*gpuContext, info,
697 const_cast<void *>(reinterpret_cast<const void*>(pixelMap->GetPixels())));
698 EXPECT_TRUE(image != nullptr);
699 gpuContext = nullptr;
700 }
701
702 /**
703 * @tc.name: MakeFromYUVAPixmapsTest005
704 * @tc.desc: test for MakeFromYUVAPixmapsTest success for YUV YCBCR_P010.
705 * @tc.type: FUNC
706 * @tc.require: I782P9
707 */
708 HWTEST_F(ImageTest, MakeFromYUVAPixmapsTest005, TestSize.Level1)
709 {
710 auto renderContext = std::make_shared<RenderContext>();
711 renderContext->InitializeEglContext();
712 renderContext->SetUpGpuContext();
713 auto gpuContext = renderContext->GetSharedDrGPUContext();
714 ASSERT_NE(gpuContext, nullptr);
715
716 size_t bufferSize = g_testJpgLength;
717 uint8_t *buffer = g_testJpgBuffer;
718 uint32_t errorCode = 0;
719 Media::SourceOptions opts;
720 opts.formatHint = "image/jpeg";
721 std::unique_ptr<Media::ImageSource> imageSource = Media::ImageSource::CreateImageSource(buffer,
722 bufferSize, opts, errorCode);
723 ASSERT_NE(imageSource.get(), nullptr);
724 Media::DecodeOptions decodeOpts;
725 decodeOpts.desiredPixelFormat = Media::PixelFormat::YCBCR_P010;
726 std::unique_ptr<Media::PixelMap> pixelMap = imageSource->CreatePixelMap(decodeOpts, errorCode);
727 ASSERT_NE(pixelMap.get(), nullptr);
728
729 YUVInfo info(300, 300, YUVInfo::PlaneConfig::Y_UV, YUVInfo::SubSampling::K420,
730 YUVInfo::YUVColorSpace::BT2020_10BIT_LIMITED_YUVCOLORSPACE,
731 YUVInfo::YUVDataType::UNORM_16);
732 auto image = Image::MakeFromYUVAPixmaps(*gpuContext, info,
733 const_cast<void *>(reinterpret_cast<const void*>(pixelMap->GetPixels())));
734 EXPECT_TRUE(image != nullptr);
735 gpuContext = nullptr;
736 }
737
738 /**
739 * @tc.name: MakeFromYUVAPixmapsTest006
740 * @tc.desc: test for MakeFromYUVAPixmapsTest success for YUV YCRCB_P010.
741 * @tc.type: FUNC
742 * @tc.require: I782P9
743 */
744 HWTEST_F(ImageTest, MakeFromYUVAPixmapsTest006, TestSize.Level1)
745 {
746 auto renderContext = std::make_shared<RenderContext>();
747 renderContext->InitializeEglContext();
748 renderContext->SetUpGpuContext();
749 auto gpuContext = renderContext->GetSharedDrGPUContext();
750 ASSERT_NE(gpuContext, nullptr);
751
752 size_t bufferSize = g_testJpgLength;
753 uint8_t *buffer = g_testJpgBuffer;
754 uint32_t errorCode = 0;
755 Media::SourceOptions opts;
756 opts.formatHint = "image/jpeg";
757 std::unique_ptr<Media::ImageSource> imageSource = Media::ImageSource::CreateImageSource(buffer,
758 bufferSize, opts, errorCode);
759 ASSERT_NE(imageSource.get(), nullptr);
760 Media::DecodeOptions decodeOpts;
761 decodeOpts.desiredPixelFormat = Media::PixelFormat::YCRCB_P010;
762 std::unique_ptr<Media::PixelMap> pixelMap = imageSource->CreatePixelMap(decodeOpts, errorCode);
763 ASSERT_NE(pixelMap.get(), nullptr);
764
765 YUVInfo info(300, 300, YUVInfo::PlaneConfig::Y_VU, YUVInfo::SubSampling::K420,
766 YUVInfo::YUVColorSpace::BT2020_10BIT_LIMITED_YUVCOLORSPACE,
767 YUVInfo::YUVDataType::UNORM_16);
768 auto image = Image::MakeFromYUVAPixmaps(*gpuContext, info,
769 const_cast<void *>(reinterpret_cast<const void*>(pixelMap->GetPixels())));
770 EXPECT_TRUE(image != nullptr);
771 gpuContext = nullptr;
772 }
773
774 #endif
775 } // namespace Drawing
776 } // namespace Rosen
777 } // namespace OHOS