// 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 "core/fxcodec/bmp/fx_bmp.h" #include #include #include #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 src_buf); FX_FILESIZE GetAvailInput(uint8_t** avail_buf); jmp_buf jmpbuf_; CFX_BmpContext* context_ptr_; std::vector out_row_buffer_; std::vector 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& 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 input_buffer_; }; #endif // CORE_FXCODEC_BMP_CFX_BMPDECOMPRESSOR_H_