Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(118)

Side by Side Diff: third_party/qcms/src/transform.c

Issue 1155033003: [qcms] Add matrix transform flag and matrix extraction api (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Zero the transform flag at creation-time. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/qcms/src/qcmsint.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* vim: set ts=8 sw=8 noexpandtab: */ 1 /* vim: set ts=8 sw=8 noexpandtab: */
2 // qcms 2 // qcms
3 // Copyright (C) 2009 Mozilla Corporation 3 // Copyright (C) 2009 Mozilla Corporation
4 // Copyright (C) 1998-2007 Marti Maria 4 // Copyright (C) 1998-2007 Marti Maria
5 // 5 //
6 // Permission is hereby granted, free of charge, to any person obtaining 6 // Permission is hereby granted, free of charge, to any person obtaining
7 // a copy of this software and associated documentation files (the "Software"), 7 // a copy of this software and associated documentation files (the "Software"),
8 // to deal in the Software without restriction, including without limitation 8 // to deal in the Software without restriction, including without limitation
9 // the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 // and/or sell copies of the Software, and to permit persons to whom the Softwar e 10 // and/or sell copies of the Software, and to permit persons to whom the Softwar e
(...skipping 1234 matching lines...) Expand 10 before | Expand all | Expand 10 after
1245 if (!transform) { 1245 if (!transform) {
1246 return NULL; 1246 return NULL;
1247 } 1247 }
1248 if (out_type != QCMS_DATA_RGB_8 && 1248 if (out_type != QCMS_DATA_RGB_8 &&
1249 out_type != QCMS_DATA_RGBA_8) { 1249 out_type != QCMS_DATA_RGBA_8) {
1250 assert(0 && "output type"); 1250 assert(0 && "output type");
1251 transform_free(transform); 1251 transform_free(transform);
1252 return NULL; 1252 return NULL;
1253 } 1253 }
1254 1254
1255 transform->transform_flags = 0;
1256
1255 if (out->output_table_r && 1257 if (out->output_table_r &&
1256 out->output_table_g && 1258 out->output_table_g &&
1257 out->output_table_b) { 1259 out->output_table_b) {
1258 precache = true; 1260 precache = true;
1259 } 1261 }
1260 1262
1261 if (qcms_supports_iccv4 && (in->A2B0 || out->B2A0 || in->mAB || out->mAB )) { 1263 if (qcms_supports_iccv4 && (in->A2B0 || out->B2A0 || in->mAB || out->mAB )) {
1262 // Precache the transformation to a CLUT 33x33x33 in size. 1264 // Precache the transformation to a CLUT 33x33x33 in size.
1263 // 33 is used by many profiles and works well in pratice. 1265 // 33 is used by many profiles and works well in pratice.
1264 // This evenly divides 256 into blocks of 8x8x8. 1266 // This evenly divides 256 into blocks of 8x8x8.
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1358 transform->matrix[0][0] = result.m[0][0]; 1360 transform->matrix[0][0] = result.m[0][0];
1359 transform->matrix[1][0] = result.m[0][1]; 1361 transform->matrix[1][0] = result.m[0][1];
1360 transform->matrix[2][0] = result.m[0][2]; 1362 transform->matrix[2][0] = result.m[0][2];
1361 transform->matrix[0][1] = result.m[1][0]; 1363 transform->matrix[0][1] = result.m[1][0];
1362 transform->matrix[1][1] = result.m[1][1]; 1364 transform->matrix[1][1] = result.m[1][1];
1363 transform->matrix[2][1] = result.m[1][2]; 1365 transform->matrix[2][1] = result.m[1][2];
1364 transform->matrix[0][2] = result.m[2][0]; 1366 transform->matrix[0][2] = result.m[2][0];
1365 transform->matrix[1][2] = result.m[2][1]; 1367 transform->matrix[1][2] = result.m[2][1];
1366 transform->matrix[2][2] = result.m[2][2]; 1368 transform->matrix[2][2] = result.m[2][2];
1367 1369
1370 /* Flag transform as matrix. */
1371 transform->transform_flags |= TRANSFORM_FLAG_MATRIX;
1372
1368 } else if (in->color_space == GRAY_SIGNATURE) { 1373 } else if (in->color_space == GRAY_SIGNATURE) {
1369 if (in_type != QCMS_DATA_GRAY_8 && 1374 if (in_type != QCMS_DATA_GRAY_8 &&
1370 in_type != QCMS_DATA_GRAYA_8){ 1375 in_type != QCMS_DATA_GRAYA_8){
1371 assert(0 && "input type"); 1376 assert(0 && "input type");
1372 transform_free(transform); 1377 transform_free(transform);
1373 return NULL; 1378 return NULL;
1374 } 1379 }
1375 1380
1376 transform->input_gamma_table_gray = build_input_gamma_table(in-> grayTRC); 1381 transform->input_gamma_table_gray = build_input_gamma_table(in-> grayTRC);
1377 if (!transform->input_gamma_table_gray) { 1382 if (!transform->input_gamma_table_gray) {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1424 1429
1425 void qcms_transform_data_type(qcms_transform *transform, void *src, void *dest, size_t length, qcms_output_type type) 1430 void qcms_transform_data_type(qcms_transform *transform, void *src, void *dest, size_t length, qcms_output_type type)
1426 { 1431 {
1427 static const struct _qcms_format_type output_rgbx = { 0, 2 }; 1432 static const struct _qcms_format_type output_rgbx = { 0, 2 };
1428 static const struct _qcms_format_type output_bgrx = { 2, 0 }; 1433 static const struct _qcms_format_type output_bgrx = { 2, 0 };
1429 1434
1430 transform->transform_fn(transform, src, dest, length, type == QCMS_OUTPU T_BGRX ? output_bgrx : output_rgbx); 1435 transform->transform_fn(transform, src, dest, length, type == QCMS_OUTPU T_BGRX ? output_bgrx : output_rgbx);
1431 } 1436 }
1432 1437
1433 qcms_bool qcms_supports_iccv4; 1438 qcms_bool qcms_supports_iccv4;
1439
1434 void qcms_enable_iccv4() 1440 void qcms_enable_iccv4()
1435 { 1441 {
1436 qcms_supports_iccv4 = true; 1442 qcms_supports_iccv4 = true;
1437 } 1443 }
1444
1445 static inline qcms_bool transform_is_matrix(qcms_transform *t)
1446 {
1447 return (t->transform_flags & TRANSFORM_FLAG_MATRIX) ? true : false;
1448 }
1449
1450 qcms_bool qcms_transform_is_matrix(qcms_transform *t)
1451 {
1452 return transform_is_matrix(t);
1453 }
1454
1455 float qcms_transform_get_matrix(qcms_transform *t, unsigned i, unsigned j)
1456 {
1457 assert(transform_is_matrix(t) && i < 3 && j < 3);
1458
1459 // Return transform matrix element in row major order (permute i and j)
1460
1461 return t->matrix[j][i];
1462 }
OLDNEW
« no previous file with comments | « third_party/qcms/src/qcmsint.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698