| // Copyright 2018 PDFium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| |
| #ifndef CORE_FXCODEC_BMP_CFX_BMPDECOMPRESSOR_H_ |
| #define CORE_FXCODEC_BMP_CFX_BMPDECOMPRESSOR_H_ |
| |
| #include <setjmp.h> |
| |
| #include <vector> |
| |
| #include "core/fxcodec/bmp/fx_bmp.h" |
| #include "core/fxcodec/codec/cfx_codec_memory.h" |
| #include "third_party/base/span.h" |
| |
| class CFX_BmpContext; |
| |
| class CFX_BmpDecompressor { |
| public: |
| CFX_BmpDecompressor(); |
| ~CFX_BmpDecompressor(); |
| |
| void Error(); |
| int32_t DecodeImage(); |
| int32_t ReadHeader(); |
| void SetInputBuffer(pdfium::span<uint8_t> src_buf); |
| FX_FILESIZE GetAvailInput() const; |
| |
| jmp_buf jmpbuf_; |
| CFX_BmpContext* context_ptr_; |
| std::vector<uint8_t> out_row_buffer_; |
| std::vector<uint32_t> palette_; |
| uint32_t header_offset_; |
| uint32_t width_; |
| uint32_t height_; |
| uint32_t compress_flag_; |
| int32_t components_; |
| size_t src_row_bytes_; |
| size_t out_row_bytes_; |
| uint16_t bit_counts_; |
| uint32_t color_used_; |
| bool imgTB_flag_; |
| int32_t pal_num_; |
| int32_t pal_type_; |
| uint32_t data_size_; |
| uint32_t img_data_offset_; |
| uint32_t img_ifh_size_; |
| size_t row_num_; |
| size_t col_num_; |
| int32_t dpi_x_; |
| int32_t dpi_y_; |
| uint32_t mask_red_; |
| uint32_t mask_green_; |
| uint32_t mask_blue_; |
| int32_t decode_status_; |
| |
| private: |
| bool GetDataPosition(uint32_t cur_pos); |
| void ReadScanline(uint32_t row_num, const std::vector<uint8_t>& row_buf); |
| int32_t DecodeRGB(); |
| int32_t DecodeRLE8(); |
| int32_t DecodeRLE4(); |
| bool ReadData(uint8_t* destination, uint32_t size); |
| void SaveDecodingStatus(int32_t status); |
| bool ValidateColorIndex(uint8_t val); |
| bool ValidateFlag() const; |
| void SetHeight(int32_t signed_height); |
| |
| RetainPtr<CFX_CodecMemory> input_buffer_; |
| }; |
| |
| #endif // CORE_FXCODEC_BMP_CFX_BMPDECOMPRESSOR_H_ |