+ // When the control is off the stage, it does not have Window.
+ return;
+ }
+
+ Dali::Window window = DevelWindow::Get(self);
+ window.ResizeSignal().Connect(this, &VideoView::OnWindowResized);
+
+ int curPos = mVideoPlayer.GetPlayPosition();
+
+ if(mIsPlay)
+ {
+ mVideoPlayer.Pause();
+ }
+
+ mPositionUpdateNotification = self.AddPropertyNotification(Actor::Property::WORLD_POSITION, StepCondition(1.0f, 1.0f));
+ mSizeUpdateNotification = self.AddPropertyNotification(Actor::Property::SIZE, StepCondition(1.0f, 1.0f));
+ mScaleUpdateNotification = self.AddPropertyNotification(Actor::Property::WORLD_SCALE, StepCondition(0.1f, 1.0f));
+ mPositionUpdateNotification.NotifySignal().Connect(this, &VideoView::UpdateDisplayArea);
+ mSizeUpdateNotification.NotifySignal().Connect(this, &VideoView::UpdateDisplayArea);
+ mScaleUpdateNotification.NotifySignal().Connect(this, &VideoView::UpdateDisplayArea);
+
+ if(mTextureRenderer)
+ {
+ self.RemoveRenderer(mTextureRenderer);
+ }
+
+ // Note VideoPlayer::SetRenderingTarget resets all the options. (e.g. url, mute, looping)
+ mVideoPlayer.SetRenderingTarget(Dali::Adaptor::Get().GetNativeWindowHandle(self));
+
+ ApplyBackupProperties();
+
+ if(!mOverlayRenderer)
+ {
+ // For underlay rendering mode, video display area have to be transparent.
+ Geometry geometry = VisualFactoryCache::CreateQuadGeometry();
+ Shader shader = Shader::New(SHADER_VIDEO_VIEW_VERT, SHADER_VIDEO_VIEW_FRAG, Shader::Hint::NONE, "VIDEO_VIEW_OVERLAY");
+ mOverlayRenderer = Renderer::New(geometry, shader);
+ mOverlayRenderer.SetProperty(Renderer::Property::BLEND_MODE, BlendMode::OFF);
+ }
+ Self().AddRenderer(mOverlayRenderer);
+
+ if(mIsPlay)
+ {
+ Play();
+ }
+
+ if(curPos > 0)
+ {
+ mVideoPlayer.SetPlayPosition(curPos);
+ }
+}
+
+void VideoView::SetNativeImageTarget()
+{
+ if(mVideoPlayer.IsVideoTextureSupported() == false)
+ {
+ DALI_LOG_ERROR("Platform doesn't support decoded video frame images\n");
+ mIsUnderlay = true;
+ return;
+ }
+
+ if(mIsPlay)
+ {
+ mVideoPlayer.Pause();
+ }
+
+ Actor self(Self());
+
+ if(mOverlayRenderer)
+ {
+ self.RemoveRenderer(mOverlayRenderer);
+
+ mOverlayRenderer.Reset();
+ }
+
+ self.RemovePropertyNotification(mPositionUpdateNotification);
+ self.RemovePropertyNotification(mSizeUpdateNotification);
+ self.RemovePropertyNotification(mScaleUpdateNotification);
+
+ int curPos = mVideoPlayer.GetPlayPosition();
+
+ Any source;
+ Dali::NativeImageSourcePtr nativeImageSourcePtr = Dali::NativeImageSource::New(source);
+ mNativeTexture = Dali::Texture::New(*nativeImageSourcePtr);
+
+ if(!mTextureRenderer)
+ {
+ Dali::Geometry geometry = VisualFactoryCache::CreateQuadGeometry();
+ Dali::Shader shader = CreateShader();
+ Dali::TextureSet textureSet = Dali::TextureSet::New();
+ textureSet.SetTexture(0u, mNativeTexture);
+
+ mTextureRenderer = Renderer::New(geometry, shader);
+ mTextureRenderer.SetTextures(textureSet);