| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the Chromium LICENSE file. | 3 // found in the Chromium LICENSE file. |
| 4 | 4 |
| 5 #include "qcms.h" | 5 #include "qcms.h" |
| 6 #include "qcms_test_util.h" | 6 #include "qcms_test_util.h" |
| 7 #include "timing.h" | 7 #include "timing.h" |
| 8 | 8 |
| 9 #include <math.h> | 9 #include <math.h> |
| 10 #include <stdio.h> | 10 #include <stdio.h> |
| 11 #include <stdlib.h> | 11 #include <stdlib.h> |
| 12 #include <string.h> | 12 #include <string.h> |
| 13 | 13 |
| 14 // External qcms tetra clut interpolators. | 14 // External qcms tetra clut interpolators. |
| 15 | 15 |
| 16 extern void qcms_transform_data_tetra_clut_rgba(qcms_transform *transform, | 16 extern void qcms_transform_data_tetra_clut_rgba(qcms_transform *transform, |
| 17 unsigned char *src, | 17 unsigned char *src, |
| 18 unsigned char *dest, | 18 unsigned char *dest, |
| 19 size_t length, | 19 size_t length, |
| 20 qcms_format_type output_format); | 20 qcms_format_type output_format); |
| 21 | 21 |
| 22 #ifdef SSE2_ENABLE |
| 22 extern void qcms_transform_data_tetra_clut_rgba_sse2(qcms_transform *transform, | 23 extern void qcms_transform_data_tetra_clut_rgba_sse2(qcms_transform *transform, |
| 23 unsigned char *src, | 24 unsigned char *src, |
| 24 unsigned char *dest, | 25 unsigned char *dest, |
| 25 size_t length, | 26 size_t length, |
| 26 qcms_format_type output_for
mat); | 27 qcms_format_type output_for
mat); |
| 28 #else |
| 29 void qcms_transform_data_tetra_clut_rgba_dummy(qcms_transform *transform, |
| 30 unsigned char *src, |
| 31 unsigned char *dest, |
| 32 size_t length, |
| 33 qcms_format_type output_format) |
| 34 { |
| 35 (void)(transform); |
| 36 (void)(src); |
| 37 (void)(dest); |
| 38 (void)(length); |
| 39 (void)(output_format); |
| 40 } |
| 41 #endif |
| 27 | 42 |
| 28 static float *create_lut(size_t lutSize) | 43 static float *create_lut(size_t lutSize) |
| 29 { | 44 { |
| 30 float *lut = malloc(lutSize * sizeof(float)); | 45 float *lut = malloc(lutSize * sizeof(float)); |
| 31 size_t i; | 46 size_t i; |
| 32 | 47 |
| 33 for (i = 0; i < lutSize; ++i) { | 48 for (i = 0; i < lutSize; ++i) { |
| 34 lut[i] = (rand() & 255) * (1.0f / 255.0f); | 49 lut[i] = (rand() & 255) * (1.0f / 255.0f); |
| 35 } | 50 } |
| 36 | 51 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 for (i = 0; i < iterations; ++i) { | 131 for (i = 0; i < iterations; ++i) { |
| 117 unsigned char *src0 = (unsigned char *)calloc(length, pixel_size); | 132 unsigned char *src0 = (unsigned char *)calloc(length, pixel_size); |
| 118 unsigned char *src1 = (unsigned char *)calloc(length, pixel_size); | 133 unsigned char *src1 = (unsigned char *)calloc(length, pixel_size); |
| 119 unsigned char *dst0 = (unsigned char *)calloc(length, pixel_size); | 134 unsigned char *dst0 = (unsigned char *)calloc(length, pixel_size); |
| 120 unsigned char *dst1 = (unsigned char *)calloc(length, pixel_size); | 135 unsigned char *dst1 = (unsigned char *)calloc(length, pixel_size); |
| 121 | 136 |
| 122 generate_source_uint8_t(src0, length, pixel_size); | 137 generate_source_uint8_t(src0, length, pixel_size); |
| 123 memcpy(src1, src0, length * pixel_size); | 138 memcpy(src1, src0, length * pixel_size); |
| 124 | 139 |
| 125 #define TRANSFORM_TEST0 qcms_transform_data_tetra_clut_rgba | 140 #define TRANSFORM_TEST0 qcms_transform_data_tetra_clut_rgba |
| 141 #ifdef SSE2_ENABLE |
| 126 #define TRANSFORM_TEST1 qcms_transform_data_tetra_clut_rgba_sse2 | 142 #define TRANSFORM_TEST1 qcms_transform_data_tetra_clut_rgba_sse2 |
| 143 #else |
| 144 #define TRANSFORM_TEST1 qcms_transform_data_tetra_clut_rgba_dummy |
| 145 #endif |
| 127 | 146 |
| 128 TIME(TRANSFORM_TEST0(&transform0, src0, dst0, length, format), &time0); | 147 TIME(TRANSFORM_TEST0(&transform0, src0, dst0, length, format), &time0); |
| 129 TIME(TRANSFORM_TEST1(&transform1, src1, dst1, length, format), &time1); | 148 TIME(TRANSFORM_TEST1(&transform1, src1, dst1, length, format), &time1); |
| 130 | 149 |
| 131 if (!validate(dst0, dst1, length, 0, pixel_size)) { | 150 if (!validate(dst0, dst1, length, 0, pixel_size)) { |
| 132 fprintf(stderr, "Invalid transform output: %d diffs\n", diffs); | 151 fprintf(stderr, "Invalid transform output: %d diffs\n", diffs); |
| 133 } | 152 } |
| 134 | 153 |
| 135 free(src0); | 154 free(src0); |
| 136 free(src1); | 155 free(src1); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 152 free(lut1); | 171 free(lut1); |
| 153 | 172 |
| 154 return diffs; | 173 return diffs; |
| 155 } | 174 } |
| 156 | 175 |
| 157 struct qcms_test_case qcms_test_tetra_clut_rgba_info = { | 176 struct qcms_test_case qcms_test_tetra_clut_rgba_info = { |
| 158 "qcms_test_tetra_clut_rgba", | 177 "qcms_test_tetra_clut_rgba", |
| 159 qcms_test_tetra_clut_rgba, | 178 qcms_test_tetra_clut_rgba, |
| 160 QCMS_TEST_DISABLED | 179 QCMS_TEST_DISABLED |
| 161 }; | 180 }; |
| OLD | NEW |