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