[dali_1.4.23] Merge branch 'devel/master'
[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) 2018 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   /**
52    * @brief Enumeration for Function to release the pixel buffer.
53    * @SINCE_1_1.43
54    */
55   enum ReleaseFunction
56   {
57     FREE,          ///< Use free function to release the pixel buffer     @SINCE_1_1.43
58     DELETE_ARRAY,  ///< Use delete[] operator to release the pixel buffer @SINCE_1_1.43
59   };
60
61   /**
62    * @brief Creates a PixelData object.
63    *
64    * @SINCE_1_1.43
65    * @param[in] buffer          The raw pixel data
66    * @param[in] bufferSize      The size of the buffer in bytes
67    * @param[in] width           Buffer width in pixels
68    * @param[in] height          Buffer height in pixels
69    * @param[in] pixelFormat     The pixel format
70    * @param[in] releaseFunction The function used to release the memory
71    * @return A handle to the PixelData
72    */
73   static PixelData New( uint8_t* buffer,
74                         uint32_t bufferSize,
75                         uint32_t width,
76                         uint32_t height,
77                         Pixel::Format pixelFormat,
78                         ReleaseFunction releaseFunction);
79
80   /**
81    * @brief Creates an empty handle.
82    * Use PixelData::New() to create an initialized object.
83    *
84    * @SINCE_1_1.43
85    */
86   PixelData();
87
88   /**
89    * @brief Destructor.
90    *
91    * @SINCE_1_1.43
92    */
93   ~PixelData();
94
95   /**
96    * @brief This copy constructor is required for (smart) pointer semantics.
97    *
98    * @SINCE_1_1.43
99    * @param[in] handle A reference to the copied handle
100    */
101   PixelData(const PixelData& handle);
102
103   /**
104    * @brief This assignment operator is required for (smart) pointer semantics.
105    *
106    * @SINCE_1_1.43
107    * @param[in] rhs A reference to the copied handle
108    * @return A reference to this object
109    */
110   PixelData& operator=(const PixelData& rhs);
111
112   /**
113    * @brief Gets the width of the buffer in pixels.
114    *
115    * @SINCE_1_1.43
116    * @return The width of the buffer in pixels
117    */
118   uint32_t GetWidth() const;
119
120   /**
121    * @brief Gets the height of the buffer in pixels.
122    *
123    * @SINCE_1_1.43
124    * @return The height of the buffer in pixels
125    */
126   uint32_t GetHeight() const;
127
128   /**
129    * @brief Gets the pixel format.
130    *
131    * @SINCE_1_1.43
132    * @return The pixel format
133    */
134   Pixel::Format GetPixelFormat() const;
135
136 public:
137
138   /**
139    * @brief The constructor.
140    * @note  Not intended for application developers.
141    * @SINCE_1_1.43
142    * @param[in] pointer A pointer to a newly allocated PixelData
143    */
144   explicit DALI_INTERNAL PixelData( Internal::PixelData* pointer );
145 };
146
147 /**
148  * @}
149  */
150 } //namespace Dali
151
152 #endif // DALI_PIXEL_DATA_H