xref: /aosp_15_r20/external/skia/src/codec/SkBmpBaseCodec.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2017 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 #ifndef SkBmpBaseCodec_DEFINED
8 #define SkBmpBaseCodec_DEFINED
9 
10 #include "include/codec/SkCodec.h"
11 #include "include/private/base/SkTemplates.h"
12 #include "src/codec/SkBmpCodec.h"
13 
14 #include <cstdint>
15 #include <memory>
16 
17 class SkStream;
18 struct SkEncodedInfo;
19 
20 /*
21  * Common base class for SkBmpStandardCodec and SkBmpMaskCodec.
22  */
23 class SkBmpBaseCodec : public SkBmpCodec {
24 public:
25     ~SkBmpBaseCodec() override;
26 
27     /*
28      * Whether fSrcBuffer was successfully created.
29      *
30      * If false, this Codec must not be used.
31      */
didCreateSrcBuffer()32     bool didCreateSrcBuffer() const { return fSrcBuffer != nullptr; }
33 
34 protected:
35     SkBmpBaseCodec(SkEncodedInfo&& info, std::unique_ptr<SkStream>,
36                    uint16_t bitsPerPixel, SkCodec::SkScanlineOrder rowOrder);
37 
srcBuffer()38     uint8_t* srcBuffer() { return reinterpret_cast<uint8_t*>(fSrcBuffer.get()); }
39 
40 private:
41     skia_private::UniqueVoidPtr fSrcBuffer;
42 
43     using INHERITED = SkBmpCodec;
44 };
45 #endif // SkBmpBaseCodec_DEFINED
46