DALI_PROPERTY_REGISTRATION( Toolkit, VideoView, "looping", BOOLEAN, LOOPING )
DALI_PROPERTY_REGISTRATION( Toolkit, VideoView, "muted", BOOLEAN, MUTED )
DALI_PROPERTY_REGISTRATION( Toolkit, VideoView, "volume", MAP, VOLUME )
+DALI_PROPERTY_REGISTRATION( Toolkit, VideoView, "underlay", BOOLEAN, UNDERLAY )
DALI_SIGNAL_REGISTRATION( Toolkit, VideoView, "finished", FINISHED_SIGNAL )
const char* const VOLUME_LEFT( "volumeLeft" );
const char* const VOLUME_RIGHT( "volumeRight" );
+
+// 3.0 TC uses RENDERING_TARGET. It should be removed in next release
const char* const RENDERING_TARGET( "renderingTarget" );
const char* const WINDOW_SURFACE_TARGET( "windowSurfaceTarget" );
const char* const NATIVE_IMAGE_TARGET( "nativeImageTarget" );
mUpdateTriggerPropertyIndex( Property::INVALID_INDEX),
mNotification( NULL ),
mCurrentVideoPlayPosition( 0 ),
- mIsNativeImageTarget( true ),
mIsPlay( false ),
- mIsPause( false )
+ mIsPause( false ),
+ mIsUnderlay( true )
{
mVideoPlayer = Dali::VideoPlayer::New();
void VideoView::OnInitialize()
{
- Any source;
- Dali::NativeImageSourcePtr nativeImageSourcePtr = Dali::NativeImageSource::New( source );
- mNativeImage = Dali::NativeImage::New( *nativeImageSourcePtr );
-
- mVideoPlayer.SetRenderingTarget( nativeImageSourcePtr );
- mVideoPlayer.FinishedSignal().Connect( this, &VideoView::EmitSignalFinish );
-
mUpdateTriggerPropertyIndex = Self().RegisterProperty( "updateTrigger", true );
+ mVideoPlayer.FinishedSignal().Connect( this, &VideoView::EmitSignalFinish );
+ SetWindowSurfaceTarget();
}
void VideoView::SetUrl( const std::string& url )
mPropertyMap.Clear();
}
- if( mIsNativeImageTarget )
+ if( !mIsUnderlay )
{
Actor self( Self() );
Internal::InitializeVisual( self, mVisual, mNativeImage );
+
+ if( self.OnStage() )
+ {
+ Toolkit::GetImplementation( mVisual ).SetOnStage( self );
+ }
}
mVideoPlayer.SetUrl( mUrl );
if( target && target->Get( targetType ) && targetType == WINDOW_SURFACE_TARGET )
{
+ mIsUnderlay = true;
this->SetWindowSurfaceTarget();
}
else if( target && target->Get( targetType ) && targetType == NATIVE_IMAGE_TARGET )
{
+ mIsUnderlay = false;
this->SetNativeImageTarget();
}
}
break;
}
+ case Toolkit::VideoView::Property::UNDERLAY:
+ {
+ bool underlay;
+ if( value.Get( underlay ) )
+ {
+ impl.SetUnderlay( underlay );
+ }
+ break;
+ }
}
}
}
value = map;
break;
}
+ case Toolkit::VideoView::Property::UNDERLAY:
+ {
+ value = impl.IsUnderlay();
+ break;
+ }
}
}
mVideoPlayer.SetRenderingTarget( Dali::Adaptor::Get().GetNativeWindowHandle() );
mVideoPlayer.SetUrl( mUrl );
- mIsNativeImageTarget = false;
+ if( !mRenderer )
+ {
+ // For underlay rendering mode, video display area have to be transparent.
+ Geometry geometry = VisualFactoryCache::CreateQuadGeometry();
+ Shader shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER );
+ mRenderer = Renderer::New( geometry, shader );
+
+ mRenderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::ON );
+ mRenderer.SetProperty( Renderer::Property::BLEND_FACTOR_SRC_RGB, BlendFactor::ONE );
+ mRenderer.SetProperty( Renderer::Property::BLEND_FACTOR_DEST_RGB, BlendFactor::ZERO );
+ mRenderer.SetProperty( Renderer::Property::BLEND_FACTOR_SRC_ALPHA, BlendFactor::ONE );
+ mRenderer.SetProperty( Renderer::Property::BLEND_FACTOR_DEST_ALPHA, BlendFactor::ZERO );
+ }
+ self.AddRenderer( mRenderer );
+
+ UpdateDisplayArea();
if( mIsPlay )
{
{
mVideoPlayer.SetPlayPosition( curPos );
}
-
- // For underlay rendering mode, video display area have to be transparent.
- Geometry geometry = VisualFactoryCache::CreateQuadGeometry();
- Shader shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER );
- Renderer renderer = Renderer::New( geometry, shader );
-
- renderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::ON );
- renderer.SetProperty( Renderer::Property::BLEND_FACTOR_SRC_RGB, BlendFactor::ONE );
- renderer.SetProperty( Renderer::Property::BLEND_FACTOR_DEST_RGB, BlendFactor::ZERO );
- renderer.SetProperty( Renderer::Property::BLEND_FACTOR_SRC_ALPHA, BlendFactor::ONE );
- renderer.SetProperty( Renderer::Property::BLEND_FACTOR_DEST_ALPHA, BlendFactor::ZERO );
- self.AddRenderer( renderer );
}
void VideoView::SetNativeImageTarget()
{
+ if( mVideoPlayer.IsVideoTextureSupported() == false )
+ {
+ DALI_LOG_ERROR( "Platform doesn't support decoded video frame images\n" );
+ mIsUnderlay = true;
+ return;
+ }
+
Actor self( Self() );
int curPos = mVideoPlayer.GetPlayPosition();
mVideoPlayer.SetUrl( mUrl );
Internal::InitializeVisual( self, mVisual, mNativeImage );
- mIsNativeImageTarget = true;
+ Self().RemoveRenderer( mRenderer );
if( mIsPlay )
{
void VideoView::UpdateDisplayArea()
{
+ if( !mIsUnderlay )
+ {
+ return;
+ }
+
Actor self( Self() );
bool positionUsesAnchorPoint = self.GetProperty( DevelActor::Property::POSITION_USES_ANCHOR_POINT ).Get< bool >();
mVideoPlayer.SetDisplayArea( mDisplayArea );
}
+void VideoView::SetUnderlay( bool set )
+{
+ if( set != mIsUnderlay )
+ {
+ mIsUnderlay = set;
+
+ if( mIsUnderlay )
+ {
+ SetWindowSurfaceTarget();
+ }
+ else
+ {
+ SetNativeImageTarget();
+ }
+ }
+}
+
+bool VideoView::IsUnderlay()
+{
+ return mIsUnderlay;
+}
+
} // namespace Internal
} // namespace toolkit