Added APIs for codec in video-player
[platform/core/uifw/dali-adaptor.git] / dali / devel-api / adaptor-framework / video-player-plugin.h
1 #ifndef __DALI_VIDEO_PLAYER_PLUGIN_H__
2 #define __DALI_VIDEO_PLAYER_PLUGIN_H__
3
4 /*
5  * Copyright (c) 2016 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 <dali/public-api/signals/dali-signal.h>
23 #include <dali/public-api/math/rect.h>
24
25 namespace Dali
26 {
27
28 class Any;
29 typedef Dali::Rect< int > DisplayArea;
30
31 /**
32  * @brief VideoPlayerPlugin is an abstract interface, used by dali-adaptor to access video player plugin.
33  * A concrete implementation must be created for each platform and provided as dynamic library.
34  * @SINCE_1_1.38
35  */
36 class VideoPlayerPlugin
37 {
38 public:
39
40   typedef Signal< void () > VideoPlayerSignalType;
41
42   /**
43    * @brief Video display rotation option
44    * @SINCE_1_1.38
45    * @remarks The option is needed only for window surface rendering target
46    */
47   enum DisplayRotation
48   {
49     ROTATION_NONE,   ///< Display isn't rotated. @SINCE_1_1.38
50     ROTATION_90,     ///< Display is rotated 90 degree. @SINCE_1_1.38
51     ROTATION_180,    ///< Display is rotated 180 degree. @SINCE_1_1.38
52     ROTATION_270     ///< Display is rotated 270 degree. @SINCE_1_1.38
53   };
54
55   /**
56    * @brief Enumeration for video codec type
57    */
58   enum class CodecType
59   {
60     DEFAULT,      ///< Codec which has higher priority as default. Platform selects it. Usually the H/W codec has higher priority than S/W codec if it exist.
61     HW,           ///< H/W codec
62     SW            ///< S/W codec
63   };
64
65   /**
66    * @brief Constructor.
67    * @SINCE_1_1.38
68    */
69   VideoPlayerPlugin(){}
70
71   /**
72    * @brief Destructor.
73    * @SINCE_1_1.38
74    */
75   virtual ~VideoPlayerPlugin(){}
76
77   /**
78    * @brief Sets a URL of the video file to play.
79    *
80    * @SINCE_1_1.38
81    * @param [in] url The url of video file
82    */
83   virtual void SetUrl( const std::string& url ) = 0;
84
85   /**
86    * @brief Returns the URL of the video file.
87    * @SINCE_1_1.38
88    * @return Url of string type
89    */
90   virtual std::string GetUrl() = 0;
91
92   /**
93    * @brief Sets the player looping status.
94    * @SINCE_1_1.38
95    *
96    * @param [in] looping The new looping status: true or false
97    */
98   virtual void SetLooping(bool looping) = 0;
99
100   /**
101    * @brief Returns the player looping status.
102    * @SINCE_1_1.38
103    *
104    * @return True if player is looping, false otherwise.
105    */
106   virtual bool IsLooping() = 0;
107
108   /**
109    * @brief Starts the video playback.
110    * @SINCE_1_1.38
111    */
112   virtual void Play() = 0;
113
114   /**
115    * @brief Pauses the video playback.
116    * @SINCE_1_1.38
117    */
118   virtual void Pause() = 0;
119
120   /**
121    * @brief Stops the video playback.
122    * @SINCE_1_1.38
123    */
124   virtual void Stop() = 0;
125
126   /**
127    * @brief Sets the player mute status.
128    * @SINCE_1_1.38
129    * @param[in] mute The new mute status, true is mute.
130    */
131   virtual void SetMute( bool mute ) = 0;
132
133   /**
134    * @brief Returns the player mute status.
135    * @SINCE_1_1.38
136    * @return True if player is mute.
137    */
138   virtual bool IsMuted() = 0;
139
140   /**
141    * @brief Sets the player volume.
142    * @SINCE_1_1.38
143    * @param[in] left The left volume scalar
144    * @param[in] right The right volume scalar
145    */
146   virtual void SetVolume( float left, float right ) = 0;
147
148   /**
149    * @brief Gets current volume factor.
150    * @SINCE_1_1.38
151    * @param[out] left The current left volume scalar
152    * @param[out] right The current right volume scalar
153    */
154   virtual void GetVolume( float& left, float& right ) = 0;
155
156   /**
157    * @brief Sets video rendering target.
158    * @SINCE_1_1.38
159    * @param[in] target The target for video rendering, window surface or native image source
160    */
161   virtual void SetRenderingTarget( Any target ) = 0;
162
163   /**
164    * @brief Sets the position for playback.
165    * @SINCE_1_1.38
166    *
167    * @param[in] millisecond The position for playback
168    */
169   virtual void SetPlayPosition( int millisecond ) = 0;
170
171   /**
172    * @brief Returns the current position in milliseconds.
173    * @SINCE_1_1.38
174    *
175    * @return The current position of playback
176    */
177   virtual int GetPlayPosition() = 0;
178
179   /**
180    * @brief Sets the area of video display.
181    * @SINCE_1_2.46
182    * param[in] area The left-top position and size of the video display area
183    */
184   virtual void SetDisplayArea( DisplayArea area ) = 0;
185
186   /**
187    * @brief Sets video display rotation
188    * @SINCE_1_1.38
189    * @param[in] rotation The rotation of display
190    */
191   virtual void SetDisplayRotation( Dali::VideoPlayerPlugin::DisplayRotation rotation ) = 0;
192
193   /**
194    * @brief Returns rotation of current video display
195    * @SINCE_1_1.38
196    * @return The rotation of current display
197    */
198   virtual Dali::VideoPlayerPlugin::DisplayRotation GetDisplayRotation() = 0;
199
200   /**
201    * @brief Connect to this signal to be notified when a video playback have finished.
202    *
203    * @SINCE_1_1.38
204    * @return A signal object to connect with.
205    */
206   virtual VideoPlayerSignalType& FinishedSignal() = 0;
207
208   /**
209    * @brief Seeks forward by the specified number of milliseconds.
210    *
211    * @SINCE_1_2.46
212    * @param[in] millisecond The position for forward playback
213    */
214   virtual void Forward( int millisecond ) = 0;
215
216   /**
217    * @brief Seeks backward by the specified number of milliseconds.
218    *
219    * @SINCE_1_2.46
220    * @param[in] millisecond The position for backward playback
221    */
222   virtual void Backward( int millisecond ) = 0;
223
224   /**
225    * @brief Checks whether the video texture is supported
226    * @return True if supported, otherwise false.
227    */
228   virtual bool IsVideoTextureSupported() = 0;
229
230   /**
231    * @brief Sets codec type
232    * @param[in] type The CodecType
233    */
234   virtual void SetCodecType( VideoPlayerPlugin::CodecType type ) = 0;
235
236   /**
237    * @brief Gets codec type
238    * @return CodecType
239    */
240   virtual VideoPlayerPlugin::CodecType GetCodecType() const = 0;
241 };
242
243 } // namespace Dali;
244
245 #endif