03fefc6e0300511f1ad055018944fbf4562b4070
[platform/core/uifw/dali-core.git] / dali / public-api / images / pixel-data.h
1 #ifndef DALI_PIXEL_DATA_H
2 #define DALI_PIXEL_DATA_H
3
4 /*
5  * Copyright (c) 2020 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <cstdint> // uint8_t, uint32_t
23
24 // INTERNAL INCLUDES
25 #include <dali/public-api/images/pixel.h>
26 #include <dali/public-api/object/base-handle.h>
27
28 namespace Dali
29 {
30 /**
31  * @addtogroup dali_core_images
32  * @{
33  */
34
35 namespace Internal
36 {
37 class PixelData;
38 }
39
40 /**
41  * @brief The PixelData object holds a pixel buffer .
42  * The PixelData takes over the ownership of the pixel buffer.
43  * The buffer memory must NOT be released outside of this class, instead, the PixelData object will release it automatically when the reference count falls to zero.
44  *
45  * @SINCE_1_1.43
46  */
47 class DALI_CORE_API PixelData : public BaseHandle
48 {
49 public:
50   /**
51    * @brief Enumeration for Function to release the pixel buffer.
52    * @SINCE_1_1.43
53    */
54   enum ReleaseFunction
55   {
56     FREE,         ///< Use free function to release the pixel buffer     @SINCE_1_1.43
57     DELETE_ARRAY, ///< Use delete[] operator to release the pixel buffer @SINCE_1_1.43
58   };
59
60   /**
61    * @brief Creates a PixelData object.
62    *
63    * @SINCE_1_1.43
64    * @param[in] buffer          The raw pixel data
65    * @param[in] bufferSize      The size of the buffer in bytes
66    * @param[in] width           Buffer width in pixels
67    * @param[in] height          Buffer height in pixels
68    * @param[in] pixelFormat     The pixel format
69    * @param[in] releaseFunction The function used to release the memory
70    * @return A handle to the PixelData
71    */
72   static PixelData New(uint8_t*        buffer,
73                        uint32_t        bufferSize,
74                        uint32_t        width,
75                        uint32_t        height,
76                        Pixel::Format   pixelFormat,
77                        ReleaseFunction releaseFunction);
78
79   /**
80    * @brief Creates an empty handle.
81    * Use PixelData::New() to create an initialized object.
82    *
83    * @SINCE_1_1.43
84    */
85   PixelData();
86
87   /**
88    * @brief Destructor.
89    *
90    * @SINCE_1_1.43
91    */
92   ~PixelData();
93
94   /**
95    * @brief This copy constructor is required for (smart) pointer semantics.
96    *
97    * @SINCE_1_1.43
98    * @param[in] handle A reference to the copied handle
99    */
100   PixelData(const PixelData& handle);
101
102   /**
103    * @brief This assignment operator is required for (smart) pointer semantics.
104    *
105    * @SINCE_1_1.43
106    * @param[in] rhs A reference to the copied handle
107    * @return A reference to this object
108    */
109   PixelData& operator=(const PixelData& rhs);
110
111   /**
112    * @brief Move constructor.
113    *
114    * @SINCE_1_9.22
115    * @param[in] rhs A reference to the moved handle
116    */
117   PixelData(PixelData&& rhs);
118
119   /**
120    * @brief Move assignment operator.
121    *
122    * @SINCE_1_9.22
123    * @param[in] rhs A reference to the moved handle
124    * @return A reference to this handle
125    */
126   PixelData& operator=(PixelData&& rhs);
127
128   /**
129    * @brief Gets the width of the buffer in pixels.
130    *
131    * @SINCE_1_1.43
132    * @return The width of the buffer in pixels
133    */
134   uint32_t GetWidth() const;
135
136   /**
137    * @brief Gets the height of the buffer in pixels.
138    *
139    * @SINCE_1_1.43
140    * @return The height of the buffer in pixels
141    */
142   uint32_t GetHeight() const;
143
144   /**
145    * @brief Gets the pixel format.
146    *
147    * @SINCE_1_1.43
148    * @return The pixel format
149    */
150   Pixel::Format GetPixelFormat() const;
151
152 public:
153   /**
154    * @brief The constructor.
155    * @note  Not intended for application developers.
156    * @SINCE_1_1.43
157    * @param[in] pointer A pointer to a newly allocated PixelData
158    */
159   explicit DALI_INTERNAL PixelData(Internal::PixelData* pointer);
160 };
161
162 /**
163  * @}
164  */
165 } //namespace Dali
166
167 #endif // DALI_PIXEL_DATA_H