[Tizen] Fix pixel format bug in pixel manipulation
[platform/core/uifw/dali-adaptor.git] / dali / internal / imaging / common / gif-loading.h
1 #ifndef DALI_INTERNAL_GIF_LOADING_H
2 #define DALI_INTERNAL_GIF_LOADING_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 // EXTERNAL INCLUDES
21 #include <cstdint>
22 #include <memory>
23 #include <dali/public-api/math/rect.h>
24 #include <dali/public-api/common/dali-vector.h>
25 #include <dali/public-api/common/vector-wrapper.h>
26 #include <dali/public-api/math/uint-16-pair.h>
27
28 // INTERNAL INCLUDES
29 #include <dali/public-api/dali-adaptor-common.h>
30 #include <dali/internal/imaging/common/animated-image-loading-impl.h>
31
32 namespace Dali
33 {
34
35 namespace Internal
36 {
37
38 namespace Adaptor
39 {
40
41 /**
42  * Class to manage loading frames of an animated gif in small chunks. Lazy initializes only when
43  * data is actually needed.
44  * Note, once the GIF has loaded, the undecoded data will reside in memory until this object
45  * is released. (This is to speed up frame loads, which would otherwise have to re-acquire the
46  * data from disk)
47  */
48 class GifLoading: public Internal::Adaptor::AnimatedImageLoading
49 {
50 public:
51
52   /**
53    * Create a GifLoading with the given url and resourceType.
54    * @param[in] url The url of the gif image to load
55    * @param[in] isLocalResource The true or false whether this is a local resource.
56    * @return A newly created GifLoading.
57    */
58   static AnimatedImageLoadingPtr New( const std::string& url, bool isLocalResource );
59
60   /**
61    * @brief Constructor
62    *
63    * Construct a Loader with the given URL
64    * @param[in] url The url of the gif image to load
65    * @param[in] isLocalResource The true or false whether this is a local resource.
66    */
67   GifLoading( const std::string& url, bool isLocalResource );
68
69   /**
70    * @brief Destructor
71    */
72   ~GifLoading() override;
73
74   /**
75    * @brief Load the next N Frames of the gif.
76    *
77    * @note This function will load the entire gif into memory if not already loaded.
78    * @param[in] frameStartIndex The frame counter to start from. Will usually be the next frame
79    * after the previous invocation of this method, or 0 to start.
80    * @param[in] count The number of frames to load
81    * @param[out] pixelData The vector in which to return the frame data
82    * @return True if the frame data was successfully loaded
83    */
84   bool LoadNextNFrames( uint32_t frameStartIndex, int count, std::vector<Dali::PixelData>& pixelData ) override;
85
86    /**
87    * @brief Load the next Frame of the animated image.
88    *
89    * @note This function will load the entire animated image into memory if not already loaded.
90    * @param[in] frameIndex The frame counter to load. Will usually be the next frame.
91    * @return Dali::Devel::PixelBuffer The loaded PixelBuffer. If loading is fail, return empty handle.
92    */
93
94   Dali::Devel::PixelBuffer LoadFrame( uint32_t frameIndex ) override;
95
96   /**
97    * @brief Get the size of a gif image.
98    *
99    * @return The width and height in pixels of the gif image.
100    */
101   ImageDimensions GetImageSize() const override;
102
103   /**
104    * @brief Get the number of frames in this gif.
105    */
106   uint32_t GetImageCount() const override;
107
108   /**
109    * @brief Get the frame interval of the frame index
110    *
111    * @note The frame is needed to be loaded before this function is called.
112    *
113    * @return The time interval of the frame(microsecond).
114    */
115   uint32_t GetFrameInterval( uint32_t frameIndex ) const override;
116
117   /**
118    * @brief Get the animated image file URL
119    *
120    * @return The URL string of the animated image file
121    */
122   std::string GetUrl() const override;
123
124 private:
125   struct Impl;
126   Impl* mImpl;
127 };
128
129 } // namespace Adaptor
130
131 } // namespace Internal
132
133 } // namespace Dali
134
135 #endif // DALI_INTERNAL_GIF_LOADING_H