Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cfx_bmpdecompressor.h
Go to the documentation of this file.
1// Copyright 2018 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_CFX_BMPDECOMPRESSOR_H_
8#define CORE_FXCODEC_BMP_CFX_BMPDECOMPRESSOR_H_
9
10#include <stdint.h>
11
12#include <vector>
13
14#include "core/fxcodec/bmp/bmp_decoder.h"
15#include "core/fxcodec/bmp/fx_bmp.h"
16#include "core/fxcrt/data_vector.h"
17#include "core/fxcrt/retain_ptr.h"
18#include "core/fxcrt/unowned_ptr.h"
19#include "third_party/base/containers/span.h"
20
21class CFX_CodecMemory;
22
23namespace fxcodec {
24
25class CFX_BmpContext;
26
28 public:
29 explicit CFX_BmpDecompressor(const CFX_BmpContext* context);
31
34 void SetInputBuffer(RetainPtr<CFX_CodecMemory> codec_memory);
36
37 const std::vector<uint32_t>* palette() const { return &palette_; }
38 uint32_t width() const { return width_; }
39 uint32_t height() const { return height_; }
40 int32_t components() const { return components_; }
41 bool img_tb_flag() const { return img_tb_flag_; }
42 int32_t pal_num() const { return pal_num_; }
43 int32_t dpi_x() const { return dpi_x_; }
44 int32_t dpi_y() const { return dpi_y_; }
45
46 private:
47 enum class DecodeStatus : uint8_t {
48 kHeader,
49 kPal,
50 kDataPre,
51 kData,
52 kTail,
53 };
54
55 enum class PalType : bool { kNew, kOld };
56
57 BmpDecoder::Status ReadBmpHeader();
58 BmpDecoder::Status ReadBmpHeaderIfh();
59 BmpDecoder::Status ReadBmpHeaderDimensions();
60 BmpDecoder::Status ReadBmpBitfields();
61 BmpDecoder::Status ReadBmpPalette();
62 bool GetDataPosition(uint32_t cur_pos);
63 void ReadNextScanline();
64 BmpDecoder::Status DecodeRGB();
65 BmpDecoder::Status DecodeRLE8();
66 BmpDecoder::Status DecodeRLE4();
67 bool ReadAllOrNone(pdfium::span<uint8_t> buf);
68 void SaveDecodingStatus(DecodeStatus status);
69 bool ValidateColorIndex(uint8_t val) const;
70 bool ValidateFlag() const;
71 bool SetHeight(int32_t signed_height);
72 int PaletteChannelCount() const { return pal_type_ == PalType::kNew ? 4 : 3; }
73
74 UnownedPtr<const CFX_BmpContext> const context_;
75 DataVector<uint8_t> out_row_buffer_;
76 std::vector<uint32_t> palette_;
77 uint32_t header_offset_ = 0;
78 uint32_t width_ = 0;
79 uint32_t height_ = 0;
80 uint32_t compress_flag_ = 0;
81 int32_t components_ = 0;
82 size_t src_row_bytes_ = 0;
83 size_t out_row_bytes_ = 0;
84 bool img_tb_flag_ = false;
85 uint16_t bit_counts_ = 0;
86 uint32_t color_used_ = 0;
87 int32_t pal_num_ = 0;
88 PalType pal_type_ = PalType::kNew;
89 uint32_t data_offset_ = 0;
90 uint32_t data_size_ = 0;
91 uint32_t img_ifh_size_ = 0;
92 uint32_t row_num_ = 0;
93 uint32_t col_num_ = 0;
94 int32_t dpi_x_ = 0;
95 int32_t dpi_y_ = 0;
96 uint32_t mask_red_ = 0;
97 uint32_t mask_green_ = 0;
98 uint32_t mask_blue_ = 0;
99 DecodeStatus decode_status_ = DecodeStatus::kHeader;
100 RetainPtr<CFX_CodecMemory> input_buffer_;
101};
102
103} // namespace fxcodec
104
105#endif // CORE_FXCODEC_BMP_CFX_BMPDECOMPRESSOR_H_
virtual void BmpReadScanline(uint32_t row_num, pdfium::span< const uint8_t > row_buf)=0
virtual bool BmpInputImagePositionBuf(uint32_t rcd_pos)=0
static bool Input(ProgressiveDecoderIface::Context *pContext, RetainPtr< CFX_CodecMemory > codec_memory)
static Status ReadHeader(ProgressiveDecoderIface::Context *pContext, int32_t *width, int32_t *height, bool *tb_flag, int32_t *components, int32_t *pal_num, const std::vector< uint32_t > **palette, CFX_DIBAttribute *pAttribute)
BmpDecoder(const BmpDecoder &)=delete
static Status LoadImage(ProgressiveDecoderIface::Context *pContext)
static std::unique_ptr< ProgressiveDecoderIface::Context > StartDecode(Delegate *pDelegate)
static FX_FILESIZE GetAvailInput(ProgressiveDecoderIface::Context *pContext)
BmpDecoder & operator=(const BmpDecoder &)=delete
UnownedPtr< BmpDecoder::Delegate > const m_pDelegate
CFX_BmpContext(BmpDecoder::Delegate *pDelegate)
CFX_BmpDecompressor m_Bmp
CFX_BmpDecompressor(const CFX_BmpContext *context)
const std::vector< uint32_t > * palette() const
void SetInputBuffer(RetainPtr< CFX_CodecMemory > codec_memory)
virtual FX_FILESIZE GetAvailInput(Context *pContext) const =0
virtual bool Input(Context *pContext, RetainPtr< CFX_CodecMemory > codec_memory)=0
virtual ~ProgressiveDecoderIface()=default
#define FX_FILESIZE
Definition fx_types.h:19