1 // Copyright 2016 The PDFium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef CORE_FXCODEC_BMP_BMP_DECODER_H_ 8 #define CORE_FXCODEC_BMP_BMP_DECODER_H_ 9 10 #include <memory> 11 12 #include "core/fxcodec/progressive_decoder_iface.h" 13 #include "core/fxcrt/fx_system.h" 14 #include "core/fxcrt/retain_ptr.h" 15 #include "core/fxcrt/span.h" 16 #include "core/fxge/dib/fx_dib.h" 17 18 #ifndef PDF_ENABLE_XFA_BMP 19 #error "BMP must be enabled" 20 #endif 21 22 namespace fxcodec { 23 24 class CFX_DIBAttribute; 25 26 class BmpDecoder { 27 public: 28 class Delegate { 29 public: 30 virtual bool BmpInputImagePositionBuf(uint32_t rcd_pos) = 0; 31 virtual void BmpReadScanline(uint32_t row_num, 32 pdfium::span<const uint8_t> row_buf) = 0; 33 }; 34 35 enum class Status : uint8_t { kFail, kSuccess, kContinue }; 36 37 static std::unique_ptr<ProgressiveDecoderIface::Context> StartDecode( 38 Delegate* pDelegate); 39 static Status ReadHeader(ProgressiveDecoderIface::Context* pContext, 40 int32_t* width, 41 int32_t* height, 42 bool* tb_flag, 43 int32_t* components, 44 pdfium::span<const FX_ARGB>* palette, 45 CFX_DIBAttribute* pAttribute); 46 static Status LoadImage(ProgressiveDecoderIface::Context* pContext); 47 static FX_FILESIZE GetAvailInput(ProgressiveDecoderIface::Context* pContext); 48 static bool Input(ProgressiveDecoderIface::Context* pContext, 49 RetainPtr<CFX_CodecMemory> codec_memory); 50 51 BmpDecoder() = delete; 52 BmpDecoder(const BmpDecoder&) = delete; 53 BmpDecoder& operator=(const BmpDecoder&) = delete; 54 }; 55 56 } // namespace fxcodec 57 58 using BmpDecoder = fxcodec::BmpDecoder; 59 60 #endif // CORE_FXCODEC_BMP_BMP_DECODER_H_ 61