OLD | NEW |
1 diff --git a/third_party/qcms/src/iccread.c b/third_party/qcms/src/iccread.c | 1 diff --git a/third_party/qcms/src/iccread.c b/third_party/qcms/src/iccread.c |
2 index 36b7011..69b7141 100644 | 2 index 36b7011..aca19d3 100644 |
3 --- a/third_party/qcms/src/iccread.c | 3 --- a/third_party/qcms/src/iccread.c |
4 +++ b/third_party/qcms/src/iccread.c | 4 +++ b/third_party/qcms/src/iccread.c |
5 @@ -266,7 +266,7 @@ qcms_bool qcms_profile_is_bogus(qcms_profile *profile) | 5 @@ -266,7 +266,7 @@ qcms_bool qcms_profile_is_bogus(qcms_profile *profile) |
6 if (profile->color_space != RGB_SIGNATURE) | 6 if (profile->color_space != RGB_SIGNATURE) |
7 return false; | 7 return false; |
8 | 8 |
9 - if (profile->A2B0 || profile->B2A0) | 9 - if (profile->A2B0 || profile->B2A0) |
10 + if (qcms_supports_iccv4 && (profile->A2B0 || profile->B2A0)) | 10 + if (qcms_supports_iccv4 && (profile->A2B0 || profile->B2A0)) |
11 return false; | 11 return false; |
12 | 12 |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 @@ -1028,6 +1089,9 @@ qcms_profile* qcms_profile_from_memory(const void *mem, si
ze_t size) | 157 @@ -1028,6 +1089,9 @@ qcms_profile* qcms_profile_from_memory(const void *mem, si
ze_t size) |
158 if (!src->valid || !index.tags) | 158 if (!src->valid || !index.tags) |
159 goto invalid_tag_table; | 159 goto invalid_tag_table; |
160 | 160 |
161 + if (!read_tag_descType(profile, src, index, TAG_desc)) | 161 + if (!read_tag_descType(profile, src, index, TAG_desc)) |
162 + goto invalid_tag_table; | 162 + goto invalid_tag_table; |
163 + | 163 + |
164 if (find_tag(index, TAG_CHAD)) { | 164 if (find_tag(index, TAG_CHAD)) { |
165 profile->chromaticAdaption = read_tag_s15Fixed16ArrayType(src, i
ndex, TAG_CHAD); | 165 profile->chromaticAdaption = read_tag_s15Fixed16ArrayType(src, i
ndex, TAG_CHAD); |
166 } else { | 166 } else { |
167 @@ -1098,6 +1162,11 @@ invalid_profile: | 167 @@ -1098,6 +1162,16 @@ invalid_profile: |
168 return INVALID_PROFILE; | 168 return INVALID_PROFILE; |
169 } | 169 } |
170 | 170 |
171 +qcms_bool qcms_profile_match(qcms_profile *p1, qcms_profile *p2) | 171 +qcms_bool qcms_profile_match(qcms_profile *p1, qcms_profile *p2) |
172 +{ | 172 +{ |
173 + return memcmp(p1->description, p2->description, sizeof p1->description) ==
0; | 173 + return memcmp(p1->description, p2->description, sizeof p1->description) ==
0; |
174 +} | 174 +} |
175 + | 175 + |
| 176 +const char* qcms_profile_get_description(qcms_profile *profile) |
| 177 +{ |
| 178 + return profile->description; |
| 179 +} |
| 180 + |
176 qcms_intent qcms_profile_get_rendering_intent(qcms_profile *profile) | 181 qcms_intent qcms_profile_get_rendering_intent(qcms_profile *profile) |
177 { | 182 { |
178 return profile->rendering_intent; | 183 return profile->rendering_intent; |
179 diff --git a/third_party/qcms/src/qcms.h b/third_party/qcms/src/qcms.h | 184 diff --git a/third_party/qcms/src/qcms.h b/third_party/qcms/src/qcms.h |
180 index 7d83623..e59528a 100644 | 185 index 7d83623..c69a772 100644 |
181 --- a/third_party/qcms/src/qcms.h | 186 --- a/third_party/qcms/src/qcms.h |
182 +++ b/third_party/qcms/src/qcms.h | 187 +++ b/third_party/qcms/src/qcms.h |
183 @@ -40,6 +40,12 @@ sale, use or other dealings in this Software without written | 188 @@ -40,6 +40,12 @@ sale, use or other dealings in this Software without written |
184 authorization from SunSoft Inc. | 189 authorization from SunSoft Inc. |
185 ******************************************************************/ | 190 ******************************************************************/ |
186 | 191 |
187 +/* | 192 +/* |
188 + * QCMS, in general, is not threadsafe. However, it should be safe to create | 193 + * QCMS, in general, is not threadsafe. However, it should be safe to create |
189 + * profile and transformation objects on different threads, so long as you | 194 + * profile and transformation objects on different threads, so long as you |
190 + * don't use the same objects on different threads at the same time. | 195 + * don't use the same objects on different threads at the same time. |
191 + */ | 196 + */ |
192 + | 197 + |
193 /* | 198 /* |
194 * Color Space Signatures | 199 * Color Space Signatures |
195 * Note that only icSigXYZData and icSigLabData are valid | 200 * Note that only icSigXYZData and icSigLabData are valid |
196 @@ -102,6 +108,12 @@ typedef enum { | 201 @@ -102,6 +108,12 @@ typedef enum { |
197 QCMS_DATA_GRAYA_8 | 202 QCMS_DATA_GRAYA_8 |
198 } qcms_data_type; | 203 } qcms_data_type; |
199 | 204 |
200 +/* Format of the output data for qcms_transform_data_type() */ | 205 +/* Format of the output data for qcms_transform_data_type() */ |
201 +typedef enum { | 206 +typedef enum { |
202 + QCMS_OUTPUT_RGBX, | 207 + QCMS_OUTPUT_RGBX, |
203 + QCMS_OUTPUT_BGRX | 208 + QCMS_OUTPUT_BGRX |
204 +} qcms_output_type; | 209 +} qcms_output_type; |
205 + | 210 + |
206 /* the names for the following two types are sort of ugly */ | 211 /* the names for the following two types are sort of ugly */ |
207 typedef struct | 212 typedef struct |
208 { | 213 { |
209 @@ -136,6 +148,8 @@ qcms_bool qcms_profile_is_bogus(qcms_profile *profile); | 214 @@ -136,6 +148,9 @@ qcms_bool qcms_profile_is_bogus(qcms_profile *profile); |
210 qcms_intent qcms_profile_get_rendering_intent(qcms_profile *profile); | 215 qcms_intent qcms_profile_get_rendering_intent(qcms_profile *profile); |
211 icColorSpaceSignature qcms_profile_get_color_space(qcms_profile *profile); | 216 icColorSpaceSignature qcms_profile_get_color_space(qcms_profile *profile); |
212 | 217 |
213 +qcms_bool qcms_profile_match(qcms_profile *p1, qcms_profile *p2); | 218 +qcms_bool qcms_profile_match(qcms_profile *p1, qcms_profile *p2); |
| 219 +const char* qcms_profile_get_description(qcms_profile *profile); |
214 + | 220 + |
215 void qcms_profile_precache_output_transform(qcms_profile *profile); | 221 void qcms_profile_precache_output_transform(qcms_profile *profile); |
216 | 222 |
217 qcms_transform* qcms_transform_create( | 223 qcms_transform* qcms_transform_create( |
218 @@ -146,6 +160,7 @@ qcms_transform* qcms_transform_create( | 224 @@ -146,6 +161,7 @@ qcms_transform* qcms_transform_create( |
219 void qcms_transform_release(qcms_transform *); | 225 void qcms_transform_release(qcms_transform *); |
220 | 226 |
221 void qcms_transform_data(qcms_transform *transform, void *src, void *dest, size
_t length); | 227 void qcms_transform_data(qcms_transform *transform, void *src, void *dest, size
_t length); |
222 +void qcms_transform_data_type(qcms_transform *transform, void *src, void *dest,
size_t length, qcms_output_type type); | 228 +void qcms_transform_data_type(qcms_transform *transform, void *src, void *dest,
size_t length, qcms_output_type type); |
223 | 229 |
224 void qcms_enable_iccv4(); | 230 void qcms_enable_iccv4(); |
225 | 231 |
226 diff --git a/third_party/qcms/src/qcmsint.h b/third_party/qcms/src/qcmsint.h | 232 diff --git a/third_party/qcms/src/qcmsint.h b/third_party/qcms/src/qcmsint.h |
227 index 53a3420..4116ed5 100644 | 233 index 53a3420..4116ed5 100644 |
228 --- a/third_party/qcms/src/qcmsint.h | 234 --- a/third_party/qcms/src/qcmsint.h |
(...skipping 913 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1142 | 1148 |
1143 -float lut_interp_linear(double value, uint16_t *table, int length); | 1149 -float lut_interp_linear(double value, uint16_t *table, int length); |
1144 -float lut_interp_linear_float(float value, float *table, int length); | 1150 -float lut_interp_linear_float(float value, float *table, int length); |
1145 -uint16_t lut_interp_linear16(uint16_t input_value, uint16_t *table, int length)
; | 1151 -uint16_t lut_interp_linear16(uint16_t input_value, uint16_t *table, int length)
; |
1146 +float lut_interp_linear(double value, uint16_t *table, size_t length); | 1152 +float lut_interp_linear(double value, uint16_t *table, size_t length); |
1147 +float lut_interp_linear_float(float value, float *table, size_t length); | 1153 +float lut_interp_linear_float(float value, float *table, size_t length); |
1148 +uint16_t lut_interp_linear16(uint16_t input_value, uint16_t *table, size_t leng
th); | 1154 +uint16_t lut_interp_linear16(uint16_t input_value, uint16_t *table, size_t leng
th); |
1149 | 1155 |
1150 | 1156 |
1151 static inline float lerp(float a, float b, float t) | 1157 static inline float lerp(float a, float b, float t) |
OLD | NEW |