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

Side by Side Diff: core/src/fpdfapi/fpdf_page/fpdf_page_func.cpp

Issue 1422513004: Merge to XFA: Add type cast definitions for CPDF_Stream. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Created 5 years, 2 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
OLDNEW
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 "../../../../third_party/base/numerics/safe_conversions_impl.h" 9 #include "../../../../third_party/base/numerics/safe_conversions_impl.h"
10 #include "../../../include/fpdfapi/fpdf_module.h" 10 #include "../../../include/fpdfapi/fpdf_module.h"
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 m_pSampleStream = NULL; 484 m_pSampleStream = NULL;
485 m_pEncodeInfo = NULL; 485 m_pEncodeInfo = NULL;
486 m_pDecodeInfo = NULL; 486 m_pDecodeInfo = NULL;
487 } 487 }
488 CPDF_SampledFunc::~CPDF_SampledFunc() { 488 CPDF_SampledFunc::~CPDF_SampledFunc() {
489 delete m_pSampleStream; 489 delete m_pSampleStream;
490 FX_Free(m_pEncodeInfo); 490 FX_Free(m_pEncodeInfo);
491 FX_Free(m_pDecodeInfo); 491 FX_Free(m_pDecodeInfo);
492 } 492 }
493 FX_BOOL CPDF_SampledFunc::v_Init(CPDF_Object* pObj) { 493 FX_BOOL CPDF_SampledFunc::v_Init(CPDF_Object* pObj) {
494 if (pObj->GetType() != PDFOBJ_STREAM) { 494 CPDF_Stream* pStream = pObj->AsStream();
495 return FALSE; 495 if (!pStream)
496 } 496 return false;
497 CPDF_Stream* pStream = (CPDF_Stream*)pObj; 497
498 CPDF_Dictionary* pDict = pStream->GetDict(); 498 CPDF_Dictionary* pDict = pStream->GetDict();
499 CPDF_Array* pSize = pDict->GetArray(FX_BSTRC("Size")); 499 CPDF_Array* pSize = pDict->GetArray(FX_BSTRC("Size"));
500 CPDF_Array* pEncode = pDict->GetArray(FX_BSTRC("Encode")); 500 CPDF_Array* pEncode = pDict->GetArray(FX_BSTRC("Encode"));
501 CPDF_Array* pDecode = pDict->GetArray(FX_BSTRC("Decode")); 501 CPDF_Array* pDecode = pDict->GetArray(FX_BSTRC("Decode"));
502 m_nBitsPerSample = pDict->GetInteger(FX_BSTRC("BitsPerSample")); 502 m_nBitsPerSample = pDict->GetInteger(FX_BSTRC("BitsPerSample"));
503 if (m_nBitsPerSample > 32) { 503 if (m_nBitsPerSample > 32) {
504 return FALSE; 504 return FALSE;
505 } 505 }
506 m_SampleMax = 0xffffffff >> (32 - m_nBitsPerSample); 506 m_SampleMax = 0xffffffff >> (32 - m_nBitsPerSample);
507 m_pSampleStream = new CPDF_StreamAcc; 507 m_pSampleStream = new CPDF_StreamAcc;
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 class CPDF_PSFunc : public CPDF_Function { 625 class CPDF_PSFunc : public CPDF_Function {
626 public: 626 public:
627 // CPDF_Function 627 // CPDF_Function
628 FX_BOOL v_Init(CPDF_Object* pObj) override; 628 FX_BOOL v_Init(CPDF_Object* pObj) override;
629 FX_BOOL v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const override; 629 FX_BOOL v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const override;
630 630
631 CPDF_PSEngine m_PS; 631 CPDF_PSEngine m_PS;
632 }; 632 };
633 633
634 FX_BOOL CPDF_PSFunc::v_Init(CPDF_Object* pObj) { 634 FX_BOOL CPDF_PSFunc::v_Init(CPDF_Object* pObj) {
635 CPDF_Stream* pStream = (CPDF_Stream*)pObj; 635 CPDF_Stream* pStream = pObj->AsStream();
636 CPDF_StreamAcc acc; 636 CPDF_StreamAcc acc;
637 acc.LoadAllData(pStream, FALSE); 637 acc.LoadAllData(pStream, FALSE);
638 return m_PS.Parse((const FX_CHAR*)acc.GetData(), acc.GetSize()); 638 return m_PS.Parse((const FX_CHAR*)acc.GetData(), acc.GetSize());
639 } 639 }
640 FX_BOOL CPDF_PSFunc::v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const { 640 FX_BOOL CPDF_PSFunc::v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const {
641 CPDF_PSEngine& PS = (CPDF_PSEngine&)m_PS; 641 CPDF_PSEngine& PS = (CPDF_PSEngine&)m_PS;
642 PS.Reset(); 642 PS.Reset();
643 int i; 643 int i;
644 for (i = 0; i < m_nInputs; i++) { 644 for (i = 0; i < m_nInputs; i++) {
645 PS.Push(inputs[i]); 645 PS.Push(inputs[i]);
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 int nresults; 807 int nresults;
808 m_pSubFunctions[i]->Call(&input, m_nInputs, outputs, nresults); 808 m_pSubFunctions[i]->Call(&input, m_nInputs, outputs, nresults);
809 return TRUE; 809 return TRUE;
810 } 810 }
811 CPDF_Function* CPDF_Function::Load(CPDF_Object* pFuncObj) { 811 CPDF_Function* CPDF_Function::Load(CPDF_Object* pFuncObj) {
812 if (pFuncObj == NULL) { 812 if (pFuncObj == NULL) {
813 return NULL; 813 return NULL;
814 } 814 }
815 CPDF_Function* pFunc = NULL; 815 CPDF_Function* pFunc = NULL;
816 int type; 816 int type;
817 if (pFuncObj->GetType() == PDFOBJ_STREAM) { 817 if (CPDF_Stream* pStream = pFuncObj->AsStream()) {
818 type = ((CPDF_Stream*)pFuncObj) 818 type = pStream->GetDict()->GetInteger(FX_BSTRC("FunctionType"));
819 ->GetDict()
820 ->GetInteger(FX_BSTRC("FunctionType"));
821 } else if (CPDF_Dictionary* pDict = pFuncObj->AsDictionary()) { 819 } else if (CPDF_Dictionary* pDict = pFuncObj->AsDictionary()) {
822 type = pDict->GetInteger(FX_BSTRC("FunctionType")); 820 type = pDict->GetInteger(FX_BSTRC("FunctionType"));
823 } else { 821 } else {
824 return NULL; 822 return NULL;
825 } 823 }
826 if (type == 0) { 824 if (type == 0) {
827 pFunc = new CPDF_SampledFunc; 825 pFunc = new CPDF_SampledFunc;
828 } else if (type == 2) { 826 } else if (type == 2) {
829 pFunc = new CPDF_ExpIntFunc; 827 pFunc = new CPDF_ExpIntFunc;
830 } else if (type == 3) { 828 } else if (type == 3) {
(...skipping 11 matching lines...) Expand all
842 } 840 }
843 CPDF_Function::CPDF_Function() { 841 CPDF_Function::CPDF_Function() {
844 m_pDomains = NULL; 842 m_pDomains = NULL;
845 m_pRanges = NULL; 843 m_pRanges = NULL;
846 } 844 }
847 CPDF_Function::~CPDF_Function() { 845 CPDF_Function::~CPDF_Function() {
848 FX_Free(m_pDomains); 846 FX_Free(m_pDomains);
849 FX_Free(m_pRanges); 847 FX_Free(m_pRanges);
850 } 848 }
851 FX_BOOL CPDF_Function::Init(CPDF_Object* pObj) { 849 FX_BOOL CPDF_Function::Init(CPDF_Object* pObj) {
852 CPDF_Dictionary* pDict; 850 CPDF_Stream* pStream = pObj->AsStream();
853 if (pObj->GetType() == PDFOBJ_STREAM) { 851 CPDF_Dictionary* pDict = pStream ? pStream->GetDict() : pObj->AsDictionary();
854 pDict = ((CPDF_Stream*)pObj)->GetDict(); 852
855 } else {
856 pDict = pObj->AsDictionary();
857 }
858 CPDF_Array* pDomains = pDict->GetArray(FX_BSTRC("Domain")); 853 CPDF_Array* pDomains = pDict->GetArray(FX_BSTRC("Domain"));
859 if (pDomains == NULL) { 854 if (!pDomains)
860 return FALSE; 855 return FALSE;
861 } 856
862 m_nInputs = pDomains->GetCount() / 2; 857 m_nInputs = pDomains->GetCount() / 2;
863 if (m_nInputs == 0) { 858 if (m_nInputs == 0)
864 return FALSE; 859 return FALSE;
865 } 860
866 m_pDomains = FX_Alloc2D(FX_FLOAT, m_nInputs, 2); 861 m_pDomains = FX_Alloc2D(FX_FLOAT, m_nInputs, 2);
867 for (int i = 0; i < m_nInputs * 2; i++) { 862 for (int i = 0; i < m_nInputs * 2; i++) {
868 m_pDomains[i] = pDomains->GetFloat(i); 863 m_pDomains[i] = pDomains->GetFloat(i);
869 } 864 }
870 CPDF_Array* pRanges = pDict->GetArray(FX_BSTRC("Range")); 865 CPDF_Array* pRanges = pDict->GetArray(FX_BSTRC("Range"));
871 m_nOutputs = 0; 866 m_nOutputs = 0;
872 if (pRanges) { 867 if (pRanges) {
873 m_nOutputs = pRanges->GetCount() / 2; 868 m_nOutputs = pRanges->GetCount() / 2;
874 m_pRanges = FX_Alloc2D(FX_FLOAT, m_nOutputs, 2); 869 m_pRanges = FX_Alloc2D(FX_FLOAT, m_nOutputs, 2);
875 for (int i = 0; i < m_nOutputs * 2; i++) { 870 for (int i = 0; i < m_nOutputs * 2; i++) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 for (int i = 0; i < m_nOutputs; i++) { 904 for (int i = 0; i < m_nOutputs; i++) {
910 if (results[i] < m_pRanges[i * 2]) { 905 if (results[i] < m_pRanges[i * 2]) {
911 results[i] = m_pRanges[i * 2]; 906 results[i] = m_pRanges[i * 2];
912 } else if (results[i] > m_pRanges[i * 2 + 1]) { 907 } else if (results[i] > m_pRanges[i * 2 + 1]) {
913 results[i] = m_pRanges[i * 2 + 1]; 908 results[i] = m_pRanges[i * 2 + 1];
914 } 909 }
915 } 910 }
916 } 911 }
917 return TRUE; 912 return TRUE;
918 } 913 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698