1 /*
2  * Copyright (C) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef INTERFACES_INNERKITS_INCLUDE_PIXEL_ASTC_H
17 #define INTERFACES_INNERKITS_INCLUDE_PIXEL_ASTC_H
18 
19 #include "pixel_map.h"
20 
21 namespace OHOS {
22 namespace Media {
23 typedef struct {
24     uint8_t magic[4];
25     uint8_t blockdimX;
26     uint8_t blockdimY;
27     uint8_t blockdimZ;
28     uint8_t xsize[3];
29     uint8_t ysize[3];
30     uint8_t zsize[3];
31 } AstcHeader;
32 
33 class PixelAstc : public PixelMap {
34 public:
PixelAstc()35     PixelAstc()
36     {
37         astcId_ = currentId.fetch_add(1, std::memory_order_relaxed);
38     }
39     virtual ~PixelAstc();
40 
41     NATIVEEXPORT uint32_t SetAlpha(const float percent) override;
42     NATIVEEXPORT bool SetAlphaType(const AlphaType &alphaType) override;
43     NATIVEEXPORT void SetTransformered(bool isTransformered) override;
44     NATIVEEXPORT void SetRowStride(uint32_t stride) override;
45 
46     NATIVEEXPORT const uint8_t *GetPixel8(int32_t x, int32_t y) override;
47     NATIVEEXPORT const uint16_t *GetPixel16(int32_t x, int32_t y) override;
48     NATIVEEXPORT const uint32_t *GetPixel32(int32_t x, int32_t y) override;
49     NATIVEEXPORT bool GetARGB32Color(int32_t x, int32_t y, uint32_t &color) override;
50     NATIVEEXPORT uint8_t GetARGB32ColorA(uint32_t color) override;
51     NATIVEEXPORT uint8_t GetARGB32ColorR(uint32_t color) override;
52     NATIVEEXPORT uint8_t GetARGB32ColorG(uint32_t color) override;
53     NATIVEEXPORT uint8_t GetARGB32ColorB(uint32_t color) override;
54     NATIVEEXPORT int32_t GetRowStride() override;
55     NATIVEEXPORT void *GetWritablePixels() const override;
GetUniqueId()56     NATIVEEXPORT uint32_t GetUniqueId() const override
57     {
58         return astcId_;
59     }
60 
61     NATIVEEXPORT void scale(float xAxis, float yAxis) override;
62     NATIVEEXPORT bool resize(float xAxis, float yAxis) override;
63     NATIVEEXPORT void translate(float xAxis, float yAxis) override;
64     NATIVEEXPORT void rotate(float degrees) override;
65     NATIVEEXPORT void flip(bool xAxis, bool yAxis) override;
66     NATIVEEXPORT uint32_t crop(const Rect &rect) override;
67 
68     // Config the pixel map parameter
69     NATIVEEXPORT bool IsSameImage(const PixelMap &other) override;
70     NATIVEEXPORT bool IsTransformered() override;
71     // judgement whether create pixelmap use source as result
72     NATIVEEXPORT bool IsSourceAsResponse() override;
73 
74     NATIVEEXPORT uint32_t ReadPixels(const uint64_t &bufferSize, const uint32_t &offset, const uint32_t &stride,
75                                      const Rect &region, uint8_t *dst) override;
76     NATIVEEXPORT uint32_t ReadPixels(const uint64_t &bufferSize, uint8_t *dst) override;
77     NATIVEEXPORT uint32_t ReadPixel(const Position &pos, uint32_t &dst) override;
78     NATIVEEXPORT uint32_t ResetConfig(const Size &size, const PixelFormat &format) override;
79     NATIVEEXPORT uint32_t WritePixel(const Position &pos, const uint32_t &color) override;
80     NATIVEEXPORT uint32_t WritePixels(const uint8_t *source, const uint64_t &bufferSize, const uint32_t &offset,
81                          const uint32_t &stride, const Rect &region) override;
82     NATIVEEXPORT uint32_t WritePixels(const uint8_t *source, const uint64_t &bufferSize) override;
83     NATIVEEXPORT bool WritePixels(const uint32_t &color) override;
84 
85 private:
86     uint32_t astcId_ = 0;
87 };
88 } // namespace Media
89 } // namespace OHOS
90 
91 #endif // INTERFACES_INNERKITS_INCLUDE_PIXEL_ASTC_H