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 ),
- mIsUnderlay( true )
+ mIsPause( false )
{
mVideoPlayer = Dali::VideoPlayer::New();
void VideoView::OnInitialize()
{
- mUpdateTriggerPropertyIndex = Self().RegisterProperty( "updateTrigger", true );
+ Any source;
+ Dali::NativeImageSourcePtr nativeImageSourcePtr = Dali::NativeImageSource::New( source );
+ mNativeImage = Dali::NativeImage::New( *nativeImageSourcePtr );
+
+ mVideoPlayer.SetRenderingTarget( nativeImageSourcePtr );
mVideoPlayer.FinishedSignal().Connect( this, &VideoView::EmitSignalFinish );
- SetWindowSurfaceTarget();
+
+ mUpdateTriggerPropertyIndex = Self().RegisterProperty( "updateTrigger", true );
}
void VideoView::SetUrl( const std::string& url )
mPropertyMap.Clear();
}
- if( !mIsUnderlay )
+ if( mIsNativeImageTarget )
{
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 );
- 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();
+ mIsNativeImageTarget = false;
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 );
- Self().RemoveRenderer( mRenderer );
+ mIsNativeImageTarget = true;
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