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 #include <vector> 12 13 #include "core/fxcodec/progressive_decoder_iface.h" 14 #include "core/fxcrt/fx_system.h" 15 #include "core/fxcrt/retain_ptr.h" 16 #include "third_party/base/containers/span.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 int32_t* pal_num, 45 const std::vector<uint32_t>** palette, 46 CFX_DIBAttribute* pAttribute); 47 static Status LoadImage(ProgressiveDecoderIface::Context* pContext); 48 static FX_FILESIZE GetAvailInput(ProgressiveDecoderIface::Context* pContext); 49 static bool Input(ProgressiveDecoderIface::Context* pContext, 50 RetainPtr<CFX_CodecMemory> codec_memory); 51 52 BmpDecoder() = delete; 53 BmpDecoder(const BmpDecoder&) = delete; 54 BmpDecoder& operator=(const BmpDecoder&) = delete; 55 }; 56 57 } // namespace fxcodec 58 59 using BmpDecoder = fxcodec::BmpDecoder; 60 61 #endif // CORE_FXCODEC_BMP_BMP_DECODER_H_ 62