OLD | NEW |
1 //------------------------------------------------------------------------------
--- | 1 //------------------------------------------------------------------------------
--- |
2 // | 2 // |
3 // Little Color Management System | 3 // Little Color Management System |
4 // Copyright (c) 1998-2014 Marti Maria Saguer | 4 // Copyright (c) 1998-2014 Marti Maria Saguer |
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 575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
586 // for separated transforms. If this is the case, | 586 // for separated transforms. If this is the case, |
587 static | 587 static |
588 _cmsTRANSFORM* AllocEmptyTransform(cmsContext ContextID, cmsPipeline* lut, | 588 _cmsTRANSFORM* AllocEmptyTransform(cmsContext ContextID, cmsPipeline* lut, |
589 cmsUInt32Number Intent, cmsUInt32
Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) | 589 cmsUInt32Number Intent, cmsUInt32
Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) |
590 { | 590 { |
591 _cmsTransformPluginChunkType* ctx = ( _cmsTransformPluginChunkType*) _cmsCo
ntextGetClientChunk(ContextID, TransformPlugin); | 591 _cmsTransformPluginChunkType* ctx = ( _cmsTransformPluginChunkType*) _cmsCo
ntextGetClientChunk(ContextID, TransformPlugin); |
592 _cmsTransformCollection* Plugin; | 592 _cmsTransformCollection* Plugin; |
593 | 593 |
594 // Allocate needed memory | 594 // Allocate needed memory |
595 _cmsTRANSFORM* p = (_cmsTRANSFORM*) _cmsMallocZero(ContextID, sizeof(_cmsTRA
NSFORM)); | 595 _cmsTRANSFORM* p = (_cmsTRANSFORM*) _cmsMallocZero(ContextID, sizeof(_cmsTRA
NSFORM)); |
596 if (!p) return NULL; | 596 if (!p) { |
| 597 cmsPipelineFree(lut); |
| 598 return NULL; |
| 599 } |
597 | 600 |
598 // Store the proposed pipeline | 601 // Store the proposed pipeline |
599 p ->Lut = lut; | 602 p ->Lut = lut; |
600 | 603 |
601 // Let's see if any plug-in want to do the transform by itself | 604 // Let's see if any plug-in want to do the transform by itself |
602 for (Plugin = ctx ->TransformCollection; | 605 for (Plugin = ctx ->TransformCollection; |
603 Plugin != NULL; | 606 Plugin != NULL; |
604 Plugin = Plugin ->Next) { | 607 Plugin = Plugin ->Next) { |
605 | 608 |
606 if (Plugin ->Factory(&p->xform, &p->UserData, &p ->FreeUserData, &p
->Lut, InputFormat, OutputFormat, dwFlags)) { | 609 if (Plugin ->Factory(&p->xform, &p->UserData, &p ->FreeUserData, &p
->Lut, InputFormat, OutputFormat, dwFlags)) { |
(...skipping 29 matching lines...) Expand all Loading... |
636 if (_cmsFormatterIsFloat(*InputFormat) && _cmsFormatterIsFloat(*OutputFormat
)) { | 639 if (_cmsFormatterIsFloat(*InputFormat) && _cmsFormatterIsFloat(*OutputFormat
)) { |
637 | 640 |
638 // Get formatter function always return a valid union, but the contents
of this union may be NULL. | 641 // Get formatter function always return a valid union, but the contents
of this union may be NULL. |
639 p ->FromInputFloat = _cmsGetFormatter(ContextID, *InputFormat, cmsForma
tterInput, CMS_PACK_FLAGS_FLOAT).FmtFloat; | 642 p ->FromInputFloat = _cmsGetFormatter(ContextID, *InputFormat, cmsForma
tterInput, CMS_PACK_FLAGS_FLOAT).FmtFloat; |
640 p ->ToOutputFloat = _cmsGetFormatter(ContextID, *OutputFormat, cmsForma
tterOutput, CMS_PACK_FLAGS_FLOAT).FmtFloat; | 643 p ->ToOutputFloat = _cmsGetFormatter(ContextID, *OutputFormat, cmsForma
tterOutput, CMS_PACK_FLAGS_FLOAT).FmtFloat; |
641 *dwFlags |= cmsFLAGS_CAN_CHANGE_FORMATTER; | 644 *dwFlags |= cmsFLAGS_CAN_CHANGE_FORMATTER; |
642 | 645 |
643 if (p ->FromInputFloat == NULL || p ->ToOutputFloat == NULL) { | 646 if (p ->FromInputFloat == NULL || p ->ToOutputFloat == NULL) { |
644 | 647 |
645 cmsSignalError(ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported r
aster format"); | 648 cmsSignalError(ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported r
aster format"); |
646 _cmsFree(ContextID, p); | 649 cmsDeleteTransform(p); |
647 return NULL; | 650 return NULL; |
648 } | 651 } |
649 | 652 |
650 if (*dwFlags & cmsFLAGS_NULLTRANSFORM) { | 653 if (*dwFlags & cmsFLAGS_NULLTRANSFORM) { |
651 | 654 |
652 p ->xform = NullFloatXFORM; | 655 p ->xform = NullFloatXFORM; |
653 } | 656 } |
654 else { | 657 else { |
655 // Float transforms don't use cach? always are non-NULL | 658 // Float transforms don't use cach? always are non-NULL |
656 p ->xform = FloatXFORM; | 659 p ->xform = FloatXFORM; |
657 } | 660 } |
658 | 661 |
659 } | 662 } |
660 else { | 663 else { |
661 | 664 |
662 if (*InputFormat == 0 && *OutputFormat == 0) { | 665 if (*InputFormat == 0 && *OutputFormat == 0) { |
663 p ->FromInput = p ->ToOutput = NULL; | 666 p ->FromInput = p ->ToOutput = NULL; |
664 *dwFlags |= cmsFLAGS_CAN_CHANGE_FORMATTER; | 667 *dwFlags |= cmsFLAGS_CAN_CHANGE_FORMATTER; |
665 } | 668 } |
666 else { | 669 else { |
667 | 670 |
668 int BytesPerPixelInput; | 671 int BytesPerPixelInput; |
669 | 672 |
670 p ->FromInput = _cmsGetFormatter(ContextID, *InputFormat, cmsFormat
terInput, CMS_PACK_FLAGS_16BITS).Fmt16; | 673 p ->FromInput = _cmsGetFormatter(ContextID, *InputFormat, cmsFormat
terInput, CMS_PACK_FLAGS_16BITS).Fmt16; |
671 p ->ToOutput = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormat
terOutput, CMS_PACK_FLAGS_16BITS).Fmt16; | 674 p ->ToOutput = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormat
terOutput, CMS_PACK_FLAGS_16BITS).Fmt16; |
672 | 675 |
673 if (p ->FromInput == NULL || p ->ToOutput == NULL) { | 676 if (p ->FromInput == NULL || p ->ToOutput == NULL) { |
674 | 677 |
675 cmsSignalError(ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupport
ed raster format"); | 678 cmsSignalError(ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupport
ed raster format"); |
676 _cmsFree(ContextID, p); | 679 cmsDeleteTransform(p); |
677 return NULL; | 680 return NULL; |
678 } | 681 } |
679 | 682 |
680 BytesPerPixelInput = T_BYTES(p ->InputFormat); | 683 BytesPerPixelInput = T_BYTES(p ->InputFormat); |
681 if (BytesPerPixelInput == 0 || BytesPerPixelInput >= 2) | 684 if (BytesPerPixelInput == 0 || BytesPerPixelInput >= 2) |
682 *dwFlags |= cmsFLAGS_CAN_CHANGE_FORMATTER; | 685 *dwFlags |= cmsFLAGS_CAN_CHANGE_FORMATTER; |
683 | 686 |
684 } | 687 } |
685 | 688 |
686 if (*dwFlags & cmsFLAGS_NULLTRANSFORM) { | 689 if (*dwFlags & cmsFLAGS_NULLTRANSFORM) { |
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1123 cmsSignalError(xform -> ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsuppor
ted raster format"); | 1126 cmsSignalError(xform -> ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsuppor
ted raster format"); |
1124 return FALSE; | 1127 return FALSE; |
1125 } | 1128 } |
1126 | 1129 |
1127 xform ->InputFormat = InputFormat; | 1130 xform ->InputFormat = InputFormat; |
1128 xform ->OutputFormat = OutputFormat; | 1131 xform ->OutputFormat = OutputFormat; |
1129 xform ->FromInput = FromInput; | 1132 xform ->FromInput = FromInput; |
1130 xform ->ToOutput = ToOutput; | 1133 xform ->ToOutput = ToOutput; |
1131 return TRUE; | 1134 return TRUE; |
1132 } | 1135 } |
OLD | NEW |