1 #ifndef DALI_VIDEO_PLAYER_PLUGIN_H
2 #define DALI_VIDEO_PLAYER_PLUGIN_H
5 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
22 #include <dali/public-api/actors/actor.h>
23 #include <dali/public-api/math/rect.h>
24 #include <dali/public-api/signals/dali-signal.h>
29 typedef Dali::Rect<int> DisplayArea;
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.
36 class VideoPlayerPlugin
39 typedef Signal<void()> VideoPlayerSignalType;
42 * @brief Video display rotation option
44 * @remarks The option is needed only for window surface rendering target
48 ROTATION_NONE, ///< Display isn't rotated. @SINCE_1_1.38
49 ROTATION_90, ///< Display is rotated 90 degree. @SINCE_1_1.38
50 ROTATION_180, ///< Display is rotated 180 degree. @SINCE_1_1.38
51 ROTATION_270 ///< Display is rotated 270 degree. @SINCE_1_1.38
55 * @brief Enumeration for video codec type
59 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.
65 * @brief The values of this enum determine how the video should be display mode to the view
71 LETTER_BOX = 0, /**< Letter box */
72 ORIGIN_SIZE, /**< Origin size */
73 FULL_SCREEN, /**< Full-screen */
74 CROPPED_FULL, /**< Cropped full-screen */
75 ORIGIN_OR_LETTER, /**< Origin size (if surface size is larger than video size(width/height)) or Letter box (if video size(width/height) is larger than surface size) */
76 DST_ROI /**< Region of Interest */
92 virtual ~VideoPlayerPlugin()
97 * @brief Sets a URL of the video file to play.
100 * @param [in] url The url of video file
102 virtual void SetUrl(const std::string& url) = 0;
105 * @brief Returns the URL of the video file.
107 * @return Url of string type
109 virtual std::string GetUrl() = 0;
112 * @brief Sets the player looping status.
115 * @param [in] looping The new looping status: true or false
117 virtual void SetLooping(bool looping) = 0;
120 * @brief Returns the player looping status.
123 * @return True if player is looping, false otherwise.
125 virtual bool IsLooping() = 0;
128 * @brief Starts the video playback.
131 virtual void Play() = 0;
134 * @brief Pauses the video playback.
137 virtual void Pause() = 0;
140 * @brief Stops the video playback.
143 virtual void Stop() = 0;
146 * @brief Sets the player mute status.
148 * @param[in] mute The new mute status, true is mute.
150 virtual void SetMute(bool mute) = 0;
153 * @brief Returns the player mute status.
155 * @return True if player is mute.
157 virtual bool IsMuted() = 0;
160 * @brief Sets the player volume.
162 * @param[in] left The left volume scalar
163 * @param[in] right The right volume scalar
165 virtual void SetVolume(float left, float right) = 0;
168 * @brief Gets current volume factor.
170 * @param[out] left The current left volume scalar
171 * @param[out] right The current right volume scalar
173 virtual void GetVolume(float& left, float& right) = 0;
176 * @brief Sets video rendering target.
178 * @param[in] target The target for video rendering, window surface or native image source
180 virtual void SetRenderingTarget(Any target) = 0;
183 * @brief Sets the position for playback.
186 * @param[in] millisecond The position for playback
188 virtual void SetPlayPosition(int millisecond) = 0;
191 * @brief Returns the current position in milliseconds.
194 * @return The current position of playback
196 virtual int GetPlayPosition() = 0;
199 * @brief Sets the area of video display.
201 * param[in] area The left-top position and size of the video display area
203 virtual void SetDisplayArea(DisplayArea area) = 0;
206 * @brief Sets video display rotation
208 * @param[in] rotation The rotation of display
210 virtual void SetDisplayRotation(Dali::VideoPlayerPlugin::DisplayRotation rotation) = 0;
213 * @brief Returns rotation of current video display
215 * @return The rotation of current display
217 virtual Dali::VideoPlayerPlugin::DisplayRotation GetDisplayRotation() = 0;
220 * @brief Connect to this signal to be notified when a video playback have finished.
223 * @return A signal object to connect with.
225 virtual VideoPlayerSignalType& FinishedSignal() = 0;
228 * @brief Seeks forward by the specified number of milliseconds.
231 * @param[in] millisecond The position for forward playback
233 virtual void Forward(int millisecond) = 0;
236 * @brief Seeks backward by the specified number of milliseconds.
239 * @param[in] millisecond The position for backward playback
241 virtual void Backward(int millisecond) = 0;
244 * @brief Checks whether the video texture is supported
245 * @return True if supported, otherwise false.
247 virtual bool IsVideoTextureSupported() = 0;
250 * @brief Sets codec type
251 * @param[in] type The CodecType
253 virtual void SetCodecType(VideoPlayerPlugin::CodecType type) = 0;
256 * @brief Gets codec type
259 virtual VideoPlayerPlugin::CodecType GetCodecType() const = 0;
262 * @brief Sets the display mode for playback.
263 * @param[in] mode of playback
265 virtual void SetDisplayMode(VideoPlayerPlugin::DisplayMode::Type mode) = 0;
268 * @brief Returns the current display mode.
269 * @return The current display mode of playback
271 virtual VideoPlayerPlugin::DisplayMode::Type GetDisplayMode() const = 0;
274 * @brief Returns the current internal media player.
275 * @return The current internal media player of video player
277 virtual Any GetMediaPlayer() = 0;
280 * @brief calls synchronization function in window system
281 * This function is called, the synchronization is started between UI(transparent hole) and video player.
283 virtual void StartSynchronization() = 0;
286 * @brief calls desynchronization function in window system
287 * This function is called, the synchronization is finished between UI(transparent hole) and video player.
289 virtual void FinishSynchronization() = 0;
292 * @brief Raise the video player above the target video plaer.
294 * @param[in] target The target video player
296 virtual void RaiseAbove(Any target) = 0;
299 * @brief Lower the video player to below the target video player.
301 * @param[in] target The target video player
303 virtual void LowerBelow(Any target) = 0;
306 * @brief Raise video player above all other sibling video players.
309 virtual void RaiseToTop() = 0;
312 * @brief Lower video player to the bottom of all other sibling video players.
315 virtual void LowerToBottom() = 0;
318 * @brief Gets Video Player's native surface.
320 * @return The return of native surface pointer of video player
322 virtual Any GetVideoPlayerSurface() = 0;
327 #endif // DALI_VIDEO_PLAYER_PLUGIN_H