X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fvideo-view%2Fvideo-view-impl.h;h=d1605cee7a24a445766ee3b8202df8dc73e1729e;hp=a662802d1f0fd2ebdcfc8c2023b6f08a985cb74e;hb=HEAD;hpb=177f1f16253dcd5bd794368e3b554418c0d07974 diff --git a/dali-toolkit/internal/controls/video-view/video-view-impl.h b/dali-toolkit/internal/controls/video-view/video-view-impl.h index a662802..c8b2a83 100644 --- a/dali-toolkit/internal/controls/video-view/video-view-impl.h +++ b/dali-toolkit/internal/controls/video-view/video-view-impl.h @@ -2,7 +2,7 @@ #define DALI_TOOLKIT_INTERNAL_VIDEO_VIEW_H /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,40 +19,41 @@ */ // EXTERNAL INCLUDES -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include // INTERNAL INCLUDES -#include #include #include namespace Dali { - namespace Toolkit { - class VideoView; namespace Internal { - -class VideoView: public Control +class VideoView : public Control { protected: - - VideoView(); + VideoView(Dali::VideoSyncMode syncMode); virtual ~VideoView(); public: - /** - * @copydoc Toolkit::VideoView::New() + * @copydoc Toolkit::DevelVideoView::New() */ - static Toolkit::VideoView New(); + static Toolkit::VideoView New(VideoSyncMode syncMode); /** * @brief Sets a video url to play. @@ -60,7 +61,7 @@ public: * @SINCE_1_1.38 * @param [in] url The url of the video resource to play */ - void SetUrl( const std::string& url ); + void SetUrl(const std::string& url); /** * @brief Returns a video url. @@ -103,19 +104,19 @@ public: /** * @copydoc Toolkit::VideoView::Forward() */ - void Forward( int millisecond ); + void Forward(int millisecond); /** * @copydoc Toolkit::VideoView::Backward() */ - void Backward( int millisecond ); + void Backward(int millisecond); /** * @brief Sets the player mute status. * @SINCE_1_1.38 * @param[i] mute The new mute status, true is mute. */ - void SetMute( bool mute ); + void SetMute(bool mute); /** * @brief Returns the player mute status. @@ -130,7 +131,7 @@ public: * @param[in] left The left volume scalar * @param[in] right The right volume scalar */ - void SetVolume( float left, float right ); + void SetVolume(float left, float right); /** * @brief Returns current volume factor. @@ -138,9 +139,9 @@ public: * @param[out] left The current left volume scalar * @param[out] right The current right volume scalar */ - void GetVolume( float& left, float& right ); + void GetVolume(float& left, float& right); - /** + /** * @copydoc Dali::Toolkit::VideoView::FinishedSignal() */ Dali::Toolkit::VideoView::VideoViewSignalType& FinishedSignal(); @@ -155,7 +156,7 @@ public: * @SINCE_1_1.38 * @param[in] map The Dali::Property::Map to use for to display. */ - void SetPropertyMap( Property::Map map ); + void SetPropertyMap(Property::Map map); // Properties /** @@ -165,7 +166,7 @@ public: * @param[in] index The property index. * @param[in] value The new property value. */ - static void SetProperty( BaseObject* object, Property::Index index, const Property::Value& value ); + static void SetProperty(BaseObject* object, Property::Index index, const Property::Value& value); /** * @brief Called to retrieve a property of an object of this type. @@ -174,7 +175,7 @@ public: * @param[in] index The property index. * @return The current value of the property. */ - static Property::Value GetProperty( BaseObject* object, Property::Index propertyIndex ); + static Property::Value GetProperty(BaseObject* object, Property::Index propertyIndex); /** * @brief Set the depth index of this image renderer @@ -183,7 +184,7 @@ public: * @SINCE_1_1.38 * @param[in] depthIndex The depth index of this renderer */ - void SetDepthIndex( int depthIndex ); + void SetDepthIndex(int depthIndex); /** * @brief Performs actions as requested using the action name. @@ -193,82 +194,243 @@ public: * @param[in] attributes The attributes with which to perfrom this action. * @return True if action has been accepted by this control */ - static bool DoAction( BaseObject* object, const std::string& actionName, const Property::Map& attributes ); + static bool DoAction(BaseObject* object, const std::string& actionName, const Property::Map& attributes); - static bool DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor ); + /** + * Connects a callback function with the object's signals. + * @param[in] object The object providing the signal. + * @param[in] tracker Used to disconnect the signal. + * @param[in] signalName The signal to connect to. + * @param[in] functor A newly allocated FunctorDelegate. + * @return True if the signal was connected. + * @post If a signal was connected, ownership of functor was passed to CallbackBase. Otherwise the c + */ + static bool DoConnectSignal(BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor); -private: // From Control + /** + * @brief Updates video display area for window rendering target + */ + void UpdateDisplayArea(Dali::PropertyNotification& source); /** - * @copydoc Toolkit::Control::OnInitialize() + * @brief Sets underlay flag and initializes new rendering target by flag. */ - virtual void OnInitialize(); + void SetUnderlay(bool set); /** - * @copydoc Toolkit::Control::OnStageConnect() + * @brief Checks underlay flag. */ - virtual void OnStageConnection( int depth ); + bool IsUnderlay(); /** - * @copydoc Toolkit::Control::OnStageDisconnection() + * @brief Sets sw codec type. */ - virtual void OnStageDisconnection(); + void SetSWCodec(bool on); /** - * @copydoc Toolkit::Control::GetNaturalSize + * @brief Gets play position. */ - virtual Vector3 GetNaturalSize(); + int GetPlayPosition(); /** - * @copydoc Toolkit::Control::GetHeightForWidth() + * @brief Sets play position. */ - virtual float GetHeightForWidth( float width ); + void SetPlayPosition(int pos); /** - * @copydoc Toolkit::Control::GetWidthForHeight() + * @brief Sets Display mode. */ - virtual float GetWidthForHeight( float height ); + void SetDisplayMode(int mode); -private: + /** + * @brief Gets Display mode. + */ + int GetDisplayMode() const; + + /** + * @brief Gets internal media player. + */ + Any GetMediaPlayer(); + + /** + * @brief Play the resize or move animation with synchronization between UI(transparent hole) and video player + * + * The resize and move animation's play() function is called. + * If the animation is played, UI and video player will work synchronization. + * + * @param[in] videoView The current VideoView + * @param[in] animation The animation for video view's resize or move. + */ + void PlayAnimation(Dali::Animation animation); + + /** + * @brief Checks whether the actor is set as a video view or not. + * + * @param[in] actor The actor to be checked + * @return True if actor is video view. + */ + bool IsVideoView(Actor actor) const; + + /** + * @brief Gets the Video Player. + * + * @return The return of video player. + */ + VideoPlayer GetVideoPlayer(); + +private: // From Control + /** + * @copydoc Toolkit::Control::OnInitialize() + */ + void OnInitialize() override; + + /** + * @copydoc Toolkit::Control::OnSceneConnection() + */ + void OnSceneConnection(int depth) override; + + /** + * @copydoc Toolkit::Control::OnSceneDisconnection() + */ + void OnSceneDisconnection() override; + + /** + * @copydoc Toolkit::Control::OnSizeSet() + */ + void OnSizeSet(const Vector3& targetSize) override; - // Undefined - VideoView( const VideoView& videoView ); + /** + * @copydoc Toolkit::Control::GetNaturalSize + */ + Vector3 GetNaturalSize() override; + +private: + /** + * @brief Construct a new VideoView. + */ + VideoView(const VideoView& videoView); - VideoView& operator=( const VideoView& videoView ); + // Undefined assignment operator. + VideoView& operator=(const VideoView& videoView); + /** + * @brief SetWindowSurfaceTarget for underlay video playback. + */ void SetWindowSurfaceTarget(); + /** + * @brief SetNativeImageTarget for native image video playback. + */ void SetNativeImageTarget(); -private: + /** + * @brief CreateShader for native image target + */ + Dali::Shader CreateShader(); + + /** + * @brief Checks whether the property has a string value. + * @param Property value + * @param String output + * @return true if the output was found + */ + bool GetStringFromProperty(const Dali::Property::Value& value, std::string& output); + + /* + * @brief Internal version of SetProperty + */ + void SetPropertyInternal(Property::Index index, const Property::Value& value); + + /* + * @brief Apply properties after reset video player + */ + void ApplyBackupProperties(); + + /* + * @brief FrameRender's callback function + * + * This function means the resize/move animation is finished, + * so Ui and video player's synchronization can be finished. + * + */ + void FrameRenderCallback(int frameID); + + /* + * @brief Set frameRender Callback function + * + * This function is added for listenr the resize/move animation is finished, + * + */ + void SetFrameRenderCallback(); + + /* + * @brief resize/move animation finished callback function + * + * This function is called the resize/move animation is finished, + * + */ + void OnAnimationFinished(Dali::Animation& animation); + + /* + * @brief window's resize callback function + * This function is called when window is resized. + * + * @param[in] winHandle The resized window's handle. + * @param[in] size The window's new size. + */ + void OnWindowResized(Dali::Window winHandle, Dali::Window::WindowSize size); - Dali::VideoPlayer mVideoPlayer; + /** + * @brief This signal is emitted when an actor's children change their sibling order + * + * @param[in] actor parent actor. + */ + void OnChildOrderChanged(Actor actor); + +private: + Dali::VideoPlayer mVideoPlayer; Dali::ImageDimensions mVideoSize; - Toolkit::Visual::Base mVisual; - Dali::Property::Map mPropertyMap; - Dali::NativeImage mNativeImage; ///< Native image handle for video rendering by texture streaming + Dali::Property::Map mPropertyMap; + Dali::Property::Map mEffectPropertyMap; + Dali::Texture mNativeTexture; + Dali::Toolkit::VideoView::VideoViewSignalType mFinishedSignal; - std::string mUrl; + + std::string mUrl; + Dali::DisplayArea mDisplayArea; + Dali::Renderer mOverlayRenderer; + Dali::Renderer mTextureRenderer; + + Dali::PropertyNotification mPositionUpdateNotification; + Dali::PropertyNotification mSizeUpdateNotification; + Dali::PropertyNotification mScaleUpdateNotification; + + Dali::Property::Map mPropertyBackup; + int mCurrentVideoPlayPosition; - bool mIsNativeImageTarget; + int mFrameID; + bool mIsPlay; - bool mIsPause; + bool mIsUnderlay; + + Dali::VideoSyncMode mSyncMode; + int mSiblingOrder; }; } // namespace Internal -inline Toolkit::Internal::VideoView& GetImpl( Toolkit::VideoView& handle ) +inline Toolkit::Internal::VideoView& GetImpl(Toolkit::VideoView& handle) { - DALI_ASSERT_ALWAYS( handle ); + DALI_ASSERT_ALWAYS(handle); Dali::RefObject& impl = handle.GetImplementation(); - return static_cast< Toolkit::Internal::VideoView& >( impl ); + return static_cast(impl); } -inline const Toolkit::Internal::VideoView& GetImpl( const Toolkit::VideoView& handle ) +inline const Toolkit::Internal::VideoView& GetImpl(const Toolkit::VideoView& handle) { - DALI_ASSERT_ALWAYS( handle ); + DALI_ASSERT_ALWAYS(handle); const Dali::RefObject& impl = handle.GetImplementation(); - return static_cast< const Toolkit::Internal::VideoView& >( impl ); + return static_cast(impl); } } // namespace Toolkit