blob: 0d672a09ffe5705b45d25ba6ae25a0293f9d0072 [file] [log] [blame]
Sanghoon Lee1fad27a2018-04-05 10:57:57 +01001/*
Michele Di Giorgiod9eaf612020-07-08 11:12:57 +01002 * Copyright (c) 2017-2020 Arm Limited.
Sanghoon Lee1fad27a2018-04-05 10:57:57 +01003 *
4 * SPDX-License-Identifier: MIT
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to
8 * deal in the Software without restriction, including without limitation the
9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 * sell copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in all
14 * copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
24#include "arm_compute/runtime/CL/CLMultiImage.h"
25#include "arm_compute/runtime/CL/CLTensor.h"
26#include "arm_compute/runtime/CL/CLTensorAllocator.h"
27#include "arm_compute/runtime/CL/functions/CLColorConvert.h"
28#include "tests/CL/CLAccessor.h"
29#include "tests/datasets/ShapeDatasets.h"
30#include "tests/framework/Asserts.h"
31#include "tests/framework/Macros.h"
32#include "tests/validation/Validation.h"
33#include "tests/validation/fixtures/ColorConvertFixture.h"
34
35namespace arm_compute
36{
37namespace test
38{
39namespace validation
40{
41namespace
42{
Sanghoon Leedec32a92018-06-29 10:52:57 +010043constexpr AbsoluteTolerance<uint8_t> tolerance_nv(2);
Michele Di Giorgioca0ffa62020-02-17 16:21:48 +000044constexpr AbsoluteTolerance<uint8_t> tolerance_u8(1);
Sanghoon Leedec32a92018-06-29 10:52:57 +010045
Sanghoon Lee1fad27a2018-04-05 10:57:57 +010046// Input data sets
Sanghoon Leec7b82f12018-07-06 13:27:27 +010047const auto RGBDataset = framework::dataset::make("FormatType", { Format::RGB888, Format::RGBA8888 });
48const auto YUYVDataset = framework::dataset::make("FormatType", { Format::YUYV422, Format::UYVY422 });
Sanghoon Lee1fad27a2018-04-05 10:57:57 +010049
Sanghoon Leec7b82f12018-07-06 13:27:27 +010050const auto ColorConvert_RGBA_to_RGB = combine(framework::dataset::make("FormatType", { Format::RGBA8888 }),
51 framework::dataset::make("FormatType", { Format::RGB888 }));
Sanghoon Lee1fad27a2018-04-05 10:57:57 +010052
Sanghoon Leec7b82f12018-07-06 13:27:27 +010053const auto ColorConvert_RGB_to_RGBA = combine(framework::dataset::make("FormatType", { Format::RGB888 }),
54 framework::dataset::make("FormatType", { Format::RGBA8888 }));
Sanghoon Lee1fad27a2018-04-05 10:57:57 +010055
Manuel Bottiniacaf21d2018-09-26 17:38:19 +010056const auto ColorConvert_RGB_to_U8 = combine(framework::dataset::make("FormatType", { Format::RGB888 }),
57 framework::dataset::make("FormatType", { Format::U8 }));
58
Sanghoon Leec7b82f12018-07-06 13:27:27 +010059const auto ColorConvert_YUYV_to_RGBDataset = combine(YUYVDataset,
60 RGBDataset);
Sanghoon Leedec32a92018-06-29 10:52:57 +010061
Sanghoon Leec7b82f12018-07-06 13:27:27 +010062const auto ColorConvert_YUVPlanar_to_RGBDataset = combine(framework::dataset::make("FormatType", { Format::IYUV, Format::NV12, Format::NV21 }),
63 RGBDataset);
Sanghoon Leedec32a92018-06-29 10:52:57 +010064
Sanghoon Leec7b82f12018-07-06 13:27:27 +010065const auto ColorConvert_RGBDataset_to_NVDataset = combine(RGBDataset,
66 framework::dataset::make("FormatType", { Format::NV12, Format::IYUV, Format::YUV444 }));
67
68const auto ColorConvert_YUYVDataset_to_NVDataset = combine(YUYVDataset,
69 framework::dataset::make("FormatType", { Format::NV12, Format::IYUV }));
70
71const auto ColorConvert_NVDataset_to_YUVDataset = combine(framework::dataset::make("FormatType", { Format::NV12, Format::NV21 }),
72 framework::dataset::make("FormatType", { Format::IYUV, Format::YUV444 }));
Sanghoon Leedec32a92018-06-29 10:52:57 +010073
Sanghoon Lee1fad27a2018-04-05 10:57:57 +010074} // namespace
75
76TEST_SUITE(CL)
77TEST_SUITE(ColorConvert)
78
Sanghoon Leedec32a92018-06-29 10:52:57 +010079template <typename T>
80using CLColorConvertFixture = ColorConvertValidationFixture<CLMultiImage, CLTensor, CLAccessor, CLColorConvert, T>;
81
Sanghoon Lee1fad27a2018-04-05 10:57:57 +010082TEST_SUITE(RGBA)
Michalis Spyroucac09dc2020-11-24 00:16:49 +000083FIXTURE_DATA_TEST_CASE(RunSmall, CLColorConvertFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(datasets::Small2DShapes(), ColorConvert_RGBA_to_RGB))
Sanghoon Lee1fad27a2018-04-05 10:57:57 +010084{
85 // Validate output
Sanghoon Leedec32a92018-06-29 10:52:57 +010086 for(unsigned int plane_idx = 0; plane_idx < _dst_num_planes; ++plane_idx)
87 {
88 validate(CLAccessor(*_target.cl_plane(plane_idx)), _reference[plane_idx]);
89 }
Sanghoon Lee1fad27a2018-04-05 10:57:57 +010090}
91
Sanghoon Leec7b82f12018-07-06 13:27:27 +010092FIXTURE_DATA_TEST_CASE(RunLarge, CLColorConvertFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(datasets::Large2DShapes(), ColorConvert_RGBA_to_RGB))
Sanghoon Lee1fad27a2018-04-05 10:57:57 +010093{
94 // Validate output
Sanghoon Leedec32a92018-06-29 10:52:57 +010095 for(unsigned int plane_idx = 0; plane_idx < _dst_num_planes; ++plane_idx)
96 {
97 validate(CLAccessor(*_target.cl_plane(plane_idx)), _reference[plane_idx]);
98 }
Sanghoon Lee1fad27a2018-04-05 10:57:57 +010099}
100TEST_SUITE_END()
101
102TEST_SUITE(RGB)
Michalis Spyroucac09dc2020-11-24 00:16:49 +0000103FIXTURE_DATA_TEST_CASE(RunSmall, CLColorConvertFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(datasets::Small2DShapes(), ColorConvert_RGB_to_RGBA))
Sanghoon Lee1fad27a2018-04-05 10:57:57 +0100104{
105 // Validate output
Sanghoon Leedec32a92018-06-29 10:52:57 +0100106 for(unsigned int plane_idx = 0; plane_idx < _dst_num_planes; ++plane_idx)
107 {
108 validate(CLAccessor(*_target.cl_plane(plane_idx)), _reference[plane_idx]);
109 }
Sanghoon Lee1fad27a2018-04-05 10:57:57 +0100110}
Sanghoon Leec7b82f12018-07-06 13:27:27 +0100111FIXTURE_DATA_TEST_CASE(RunLarge, CLColorConvertFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(datasets::Large2DShapes(), ColorConvert_RGB_to_RGBA))
112{
113 // Validate output
114 for(unsigned int plane_idx = 0; plane_idx < _dst_num_planes; ++plane_idx)
115 {
116 validate(CLAccessor(*_target.cl_plane(plane_idx)), _reference[plane_idx]);
117 }
118}
119TEST_SUITE_END()
120
Manuel Bottiniacaf21d2018-09-26 17:38:19 +0100121TEST_SUITE(RGBtoU8)
Michalis Spyroucac09dc2020-11-24 00:16:49 +0000122FIXTURE_DATA_TEST_CASE(RunSmall, CLColorConvertFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(datasets::Small2DShapes(), ColorConvert_RGB_to_U8))
Manuel Bottiniacaf21d2018-09-26 17:38:19 +0100123{
124 // Validate output
125 for(unsigned int plane_idx = 0; plane_idx < _dst_num_planes; ++plane_idx)
126 {
Michele Di Giorgioca0ffa62020-02-17 16:21:48 +0000127 validate(CLAccessor(*_target.cl_plane(plane_idx)), _reference[plane_idx], tolerance_u8);
Manuel Bottiniacaf21d2018-09-26 17:38:19 +0100128 }
129}
130FIXTURE_DATA_TEST_CASE(RunLarge, CLColorConvertFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(datasets::Large2DShapes(), ColorConvert_RGB_to_U8))
131{
132 // Validate output
133 for(unsigned int plane_idx = 0; plane_idx < _dst_num_planes; ++plane_idx)
134 {
Michele Di Giorgioca0ffa62020-02-17 16:21:48 +0000135 validate(CLAccessor(*_target.cl_plane(plane_idx)), _reference[plane_idx], tolerance_u8);
Manuel Bottiniacaf21d2018-09-26 17:38:19 +0100136 }
137}
138TEST_SUITE_END()
139
Sanghoon Leec7b82f12018-07-06 13:27:27 +0100140TEST_SUITE(YUV)
Michalis Spyroucac09dc2020-11-24 00:16:49 +0000141FIXTURE_DATA_TEST_CASE(RunSmall, CLColorConvertFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(datasets::Small2DShapes(), ColorConvert_YUYV_to_RGBDataset))
Sanghoon Leec7b82f12018-07-06 13:27:27 +0100142{
143 // Validate output
144 for(unsigned int plane_idx = 0; plane_idx < _dst_num_planes; ++plane_idx)
145 {
146 validate(CLAccessor(*_target.cl_plane(plane_idx)), _reference[plane_idx]);
147 }
148}
149FIXTURE_DATA_TEST_CASE(RunLarge, CLColorConvertFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(datasets::Large2DShapes(), ColorConvert_YUYV_to_RGBDataset))
150{
151 // Validate output
152 for(unsigned int plane_idx = 0; plane_idx < _dst_num_planes; ++plane_idx)
153 {
154 validate(CLAccessor(*_target.cl_plane(plane_idx)), _reference[plane_idx]);
155 }
156}
157TEST_SUITE_END()
158
159TEST_SUITE(YUVPlanar)
Michalis Spyroucac09dc2020-11-24 00:16:49 +0000160FIXTURE_DATA_TEST_CASE(RunSmall, CLColorConvertFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(datasets::Small2DShapes(), ColorConvert_YUVPlanar_to_RGBDataset))
Sanghoon Leec7b82f12018-07-06 13:27:27 +0100161{
162 // Validate output
163 for(unsigned int plane_idx = 0; plane_idx < _dst_num_planes; ++plane_idx)
164 {
165 validate(CLAccessor(*_target.cl_plane(plane_idx)), _reference[plane_idx]);
166 }
167}
168FIXTURE_DATA_TEST_CASE(RunLarge, CLColorConvertFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(datasets::Large2DShapes(), ColorConvert_YUVPlanar_to_RGBDataset))
Sanghoon Lee1fad27a2018-04-05 10:57:57 +0100169{
170 // Validate output
Sanghoon Leedec32a92018-06-29 10:52:57 +0100171 for(unsigned int plane_idx = 0; plane_idx < _dst_num_planes; ++plane_idx)
172 {
173 validate(CLAccessor(*_target.cl_plane(plane_idx)), _reference[plane_idx]);
174 }
Sanghoon Lee1fad27a2018-04-05 10:57:57 +0100175}
176TEST_SUITE_END()
Sanghoon Leedec32a92018-06-29 10:52:57 +0100177
178TEST_SUITE(NV)
Michalis Spyroucac09dc2020-11-24 00:16:49 +0000179FIXTURE_DATA_TEST_CASE(RunSmall, CLColorConvertFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(datasets::Small2DShapes(), ColorConvert_RGBDataset_to_NVDataset))
Sanghoon Leedec32a92018-06-29 10:52:57 +0100180{
181 // Validate output
182 for(unsigned int plane_idx = 0; plane_idx < _dst_num_planes; ++plane_idx)
183 {
184 validate(CLAccessor(*_target.cl_plane(plane_idx)), _reference[plane_idx], tolerance_nv);
185 }
186}
Sanghoon Leec7b82f12018-07-06 13:27:27 +0100187FIXTURE_DATA_TEST_CASE(RunLarge, CLColorConvertFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(datasets::Large2DShapes(), ColorConvert_RGBDataset_to_NVDataset))
Sanghoon Leedec32a92018-06-29 10:52:57 +0100188{
189 // Validate output
190 for(unsigned int plane_idx = 0; plane_idx < _dst_num_planes; ++plane_idx)
191 {
192 validate(CLAccessor(*_target.cl_plane(plane_idx)), _reference[plane_idx], tolerance_nv);
193 }
194}
195TEST_SUITE_END()
196
197TEST_SUITE(YUYVtoNV)
Michalis Spyroucac09dc2020-11-24 00:16:49 +0000198FIXTURE_DATA_TEST_CASE(RunSmall, CLColorConvertFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(datasets::Small2DShapes(), ColorConvert_YUYVDataset_to_NVDataset))
Sanghoon Leedec32a92018-06-29 10:52:57 +0100199{
200 // Validate output
201 for(unsigned int plane_idx = 0; plane_idx < _dst_num_planes; ++plane_idx)
202 {
203 validate(CLAccessor(*_target.cl_plane(plane_idx)), _reference[plane_idx]);
204 }
205}
Sanghoon Leec7b82f12018-07-06 13:27:27 +0100206FIXTURE_DATA_TEST_CASE(RunLarge, CLColorConvertFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(datasets::Large2DShapes(), ColorConvert_YUYVDataset_to_NVDataset))
Sanghoon Leedec32a92018-06-29 10:52:57 +0100207{
208 // Validate output
209 for(unsigned int plane_idx = 0; plane_idx < _dst_num_planes; ++plane_idx)
210 {
211 validate(CLAccessor(*_target.cl_plane(plane_idx)), _reference[plane_idx]);
212 }
213}
214
215TEST_SUITE_END()
216
217TEST_SUITE(NVtoYUV)
Michalis Spyroucac09dc2020-11-24 00:16:49 +0000218FIXTURE_DATA_TEST_CASE(RunSmall, CLColorConvertFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(datasets::Small2DShapes(), ColorConvert_NVDataset_to_YUVDataset))
Sanghoon Leedec32a92018-06-29 10:52:57 +0100219{
220 // Validate output
221 for(unsigned int plane_idx = 0; plane_idx < _dst_num_planes; ++plane_idx)
222 {
223 validate(CLAccessor(*_target.cl_plane(plane_idx)), _reference[plane_idx]);
224 }
225}
Sanghoon Leec7b82f12018-07-06 13:27:27 +0100226FIXTURE_DATA_TEST_CASE(RunLarge, CLColorConvertFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(datasets::Large2DShapes(), ColorConvert_NVDataset_to_YUVDataset))
Sanghoon Leedec32a92018-06-29 10:52:57 +0100227{
228 // Validate output
229 for(unsigned int plane_idx = 0; plane_idx < _dst_num_planes; ++plane_idx)
230 {
231 validate(CLAccessor(*_target.cl_plane(plane_idx)), _reference[plane_idx]);
232 }
233}
234
235TEST_SUITE_END()
236
Sanghoon Lee1fad27a2018-04-05 10:57:57 +0100237TEST_SUITE_END()
238TEST_SUITE_END()
239} // namespace validation
240} // namespace test
241} // namespace arm_compute