OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium 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 LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include <limits.h> | 7 #include <limits.h> |
8 | 8 |
9 #include "../../../include/fpdfapi/fpdf_page.h" | 9 #include "../../../include/fpdfapi/fpdf_page.h" |
10 #include "../../../include/fpdfapi/fpdf_module.h" | 10 #include "../../../include/fpdfapi/fpdf_module.h" |
(...skipping 652 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
663 return FALSE; | 663 return FALSE; |
664 } | 664 } |
665 CPDF_Array* pArray0 = pDict->GetArray(FX_BSTRC("C0")); | 665 CPDF_Array* pArray0 = pDict->GetArray(FX_BSTRC("C0")); |
666 if (m_nOutputs == 0) { | 666 if (m_nOutputs == 0) { |
667 m_nOutputs = 1; | 667 m_nOutputs = 1; |
668 if (pArray0) { | 668 if (pArray0) { |
669 m_nOutputs = pArray0->GetCount(); | 669 m_nOutputs = pArray0->GetCount(); |
670 } | 670 } |
671 } | 671 } |
672 CPDF_Array* pArray1 = pDict->GetArray(FX_BSTRC("C1")); | 672 CPDF_Array* pArray1 = pDict->GetArray(FX_BSTRC("C1")); |
673 m_pBeginValues = FX_Alloc(FX_FLOAT, m_nOutputs * 2); | 673 m_pBeginValues = FX_Alloc2D(FX_FLOAT, m_nOutputs, 2); |
674 m_pEndValues = FX_Alloc(FX_FLOAT, m_nOutputs * 2); | 674 m_pEndValues = FX_Alloc2D(FX_FLOAT, m_nOutputs, 2); |
675 for (int i = 0; i < m_nOutputs; i ++) { | 675 for (int i = 0; i < m_nOutputs; i ++) { |
676 m_pBeginValues[i] = pArray0 ? pArray0->GetFloat(i) : 0.0f; | 676 m_pBeginValues[i] = pArray0 ? pArray0->GetFloat(i) : 0.0f; |
677 m_pEndValues[i] = pArray1 ? pArray1->GetFloat(i) : 1.0f; | 677 m_pEndValues[i] = pArray1 ? pArray1->GetFloat(i) : 1.0f; |
678 } | 678 } |
679 m_Exponent = pDict->GetFloat(FX_BSTRC("N")); | 679 m_Exponent = pDict->GetFloat(FX_BSTRC("N")); |
680 m_nOrigOutputs = m_nOutputs; | 680 m_nOrigOutputs = m_nOutputs; |
681 if (m_nOutputs && m_nInputs > INT_MAX / m_nOutputs) { | 681 if (m_nOutputs && m_nInputs > INT_MAX / m_nOutputs) { |
682 return FALSE; | 682 return FALSE; |
683 } | 683 } |
684 m_nOutputs *= m_nInputs; | 684 m_nOutputs *= m_nInputs; |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
761 m_pBounds = FX_Alloc(FX_FLOAT, m_nSubs + 1); | 761 m_pBounds = FX_Alloc(FX_FLOAT, m_nSubs + 1); |
762 m_pBounds[0] = m_pDomains[0]; | 762 m_pBounds[0] = m_pDomains[0]; |
763 pArray = pDict->GetArray(FX_BSTRC("Bounds")); | 763 pArray = pDict->GetArray(FX_BSTRC("Bounds")); |
764 if (pArray == NULL) { | 764 if (pArray == NULL) { |
765 return FALSE; | 765 return FALSE; |
766 } | 766 } |
767 for (i = 0; i < m_nSubs - 1; i ++) { | 767 for (i = 0; i < m_nSubs - 1; i ++) { |
768 m_pBounds[i + 1] = pArray->GetFloat(i); | 768 m_pBounds[i + 1] = pArray->GetFloat(i); |
769 } | 769 } |
770 m_pBounds[m_nSubs] = m_pDomains[1]; | 770 m_pBounds[m_nSubs] = m_pDomains[1]; |
771 m_pEncode = FX_Alloc(FX_FLOAT, m_nSubs * 2); | 771 m_pEncode = FX_Alloc2D(FX_FLOAT, m_nSubs, 2); |
772 pArray = pDict->GetArray(FX_BSTRC("Encode")); | 772 pArray = pDict->GetArray(FX_BSTRC("Encode")); |
773 if (pArray == NULL) { | 773 if (pArray == NULL) { |
774 return FALSE; | 774 return FALSE; |
775 } | 775 } |
776 for (i = 0; i < m_nSubs * 2; i ++) { | 776 for (i = 0; i < m_nSubs * 2; i ++) { |
777 m_pEncode[i] = pArray->GetFloat(i); | 777 m_pEncode[i] = pArray->GetFloat(i); |
778 } | 778 } |
779 return TRUE; | 779 return TRUE; |
780 } | 780 } |
781 FX_BOOL CPDF_StitchFunc::v_Call(FX_FLOAT* inputs, FX_FLOAT* outputs) const | 781 FX_BOOL CPDF_StitchFunc::v_Call(FX_FLOAT* inputs, FX_FLOAT* outputs) const |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
850 pDict = (CPDF_Dictionary*)pObj; | 850 pDict = (CPDF_Dictionary*)pObj; |
851 } | 851 } |
852 CPDF_Array* pDomains = pDict->GetArray(FX_BSTRC("Domain")); | 852 CPDF_Array* pDomains = pDict->GetArray(FX_BSTRC("Domain")); |
853 if (pDomains == NULL) { | 853 if (pDomains == NULL) { |
854 return FALSE; | 854 return FALSE; |
855 } | 855 } |
856 m_nInputs = pDomains->GetCount() / 2; | 856 m_nInputs = pDomains->GetCount() / 2; |
857 if (m_nInputs == 0) { | 857 if (m_nInputs == 0) { |
858 return FALSE; | 858 return FALSE; |
859 } | 859 } |
860 m_pDomains = FX_Alloc(FX_FLOAT, m_nInputs * 2); | 860 m_pDomains = FX_Alloc2D(FX_FLOAT, m_nInputs, 2); |
861 for (int i = 0; i < m_nInputs * 2; i ++) { | 861 for (int i = 0; i < m_nInputs * 2; i ++) { |
862 m_pDomains[i] = pDomains->GetFloat(i); | 862 m_pDomains[i] = pDomains->GetFloat(i); |
863 } | 863 } |
864 CPDF_Array* pRanges = pDict->GetArray(FX_BSTRC("Range")); | 864 CPDF_Array* pRanges = pDict->GetArray(FX_BSTRC("Range")); |
865 m_nOutputs = 0; | 865 m_nOutputs = 0; |
866 if (pRanges) { | 866 if (pRanges) { |
867 m_nOutputs = pRanges->GetCount() / 2; | 867 m_nOutputs = pRanges->GetCount() / 2; |
868 m_pRanges = FX_Alloc(FX_FLOAT, m_nOutputs * 2); | 868 m_pRanges = FX_Alloc2D(FX_FLOAT, m_nOutputs, 2); |
869 for (int i = 0; i < m_nOutputs * 2; i ++) { | 869 for (int i = 0; i < m_nOutputs * 2; i ++) { |
870 m_pRanges[i] = pRanges->GetFloat(i); | 870 m_pRanges[i] = pRanges->GetFloat(i); |
871 } | 871 } |
872 } | 872 } |
873 FX_DWORD old_outputs = m_nOutputs; | 873 FX_DWORD old_outputs = m_nOutputs; |
874 FX_BOOL ret = v_Init(pObj); | 874 FX_BOOL ret = v_Init(pObj); |
875 if (m_pRanges && m_nOutputs > (int)old_outputs) { | 875 if (m_pRanges && m_nOutputs > (int)old_outputs) { |
876 m_pRanges = FX_Realloc(FX_FLOAT, m_pRanges, m_nOutputs * 2); | 876 m_pRanges = FX_Realloc(FX_FLOAT, m_pRanges, m_nOutputs * 2); |
877 if (m_pRanges) { | 877 if (m_pRanges) { |
878 FXSYS_memset32(m_pRanges + (old_outputs * 2), 0, sizeof(FX_FLOAT) *
(m_nOutputs - old_outputs) * 2); | 878 FXSYS_memset32(m_pRanges + (old_outputs * 2), 0, sizeof(FX_FLOAT) *
(m_nOutputs - old_outputs) * 2); |
(...skipping 19 matching lines...) Expand all Loading... |
898 for (int i = 0; i < m_nOutputs; i ++) { | 898 for (int i = 0; i < m_nOutputs; i ++) { |
899 if (results[i] < m_pRanges[i * 2]) { | 899 if (results[i] < m_pRanges[i * 2]) { |
900 results[i] = m_pRanges[i * 2]; | 900 results[i] = m_pRanges[i * 2]; |
901 } else if (results[i] > m_pRanges[i * 2 + 1]) { | 901 } else if (results[i] > m_pRanges[i * 2 + 1]) { |
902 results[i] = m_pRanges[i * 2 + 1]; | 902 results[i] = m_pRanges[i * 2 + 1]; |
903 } | 903 } |
904 } | 904 } |
905 } | 905 } |
906 return TRUE; | 906 return TRUE; |
907 } | 907 } |
OLD | NEW |