#include <unistd.h>
#include <libintl.h>
#include <xkbcommon/xkbcommon.h>
-#include <dali/devel-api/images/native-image-interface-extension.h>
namespace Dali
{
//get tbm surface from buffer
tbm_surface_h tbmSurface = static_cast< tbm_surface_h >( wl_buffer_get_user_data( buffer ) );
- widgetView->UpdateImageSource( tbmSurface, buffer, surface);
+ widgetView->UpdateImageSource( tbmSurface );
+ }
+
+ if( preBuffer != NULL && tizen_remote_surface_get_version( surface ) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION )
+ {
+ tizen_remote_surface_release( surface, preBuffer );
+ tbm_surface_h preTbmSurface = (tbm_surface_h)wl_buffer_get_user_data( preBuffer );
+ tbm_surface_internal_unref( preTbmSurface );
+ wl_buffer_destroy( preBuffer );
}
remoteSurface = surface;
return ( mWidgetImageView )? true: false;
}
-
-class DestructorCallback: public CallbackBase
+void WidgetView::UpdateImageSource( tbm_surface_h source )
{
-public:
- DestructorCallback(void *buffer ,void *surface)
- :CallbackBase( reinterpret_cast< void* >( this ),
- NULL, // we get the dispatcher to call function directly
- reinterpret_cast< CallbackBase::Dispatcher>( &DestructorCallback::Dispatcher) ),
- mWlBuffer( buffer ),
- mRemoteSurface( surface ) {
-
- }
-
- void RunCallback()
- {
- struct wl_buffer *buffer = static_cast< struct wl_buffer* >(mWlBuffer);
- struct tizen_remote_surface *surface = static_cast< struct tizen_remote_surface* >(mRemoteSurface);
- if (tizen_remote_surface_get_version( surface ) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION) {
- tizen_remote_surface_release( surface, buffer );
- tbm_surface_h preTbmSurface = (tbm_surface_h)wl_buffer_get_user_data( buffer );
- tbm_surface_internal_unref( preTbmSurface );
- wl_buffer_destroy( buffer );
- }
- }
-
- static void Dispatcher( CallbackBase& base )
- {
- DestructorCallback& callback( static_cast< DestructorCallback& >( base) );
- callback.RunCallback();
- }
-
- ~DestructorCallback()
- {
- }
-
-private:
- void *mWlBuffer ;
- void *mRemoteSurface;
-};
-
-
-void WidgetView::UpdateImageSource( tbm_surface_h source , struct wl_buffer *buffer , struct tizen_remote_surface *surface)
-{
- DestructorCallback* callback = new DestructorCallback( buffer, surface );
- TriggerEventFactory triggerEventFactory;
- TriggerEventInterface* notification = triggerEventFactory.CreateTriggerEvent( callback,
- TriggerEventInterface::DELETE_AFTER_TRIGGER );
-
mImageSource = Dali::NativeImageSource::New( source );
Dali::NativeImage image = Dali::NativeImage::New( *mImageSource );
- NativeImageInterfacePtr mImageSourcePtr = static_cast< NativeImageInterfacePtr >(mImageSource);
- NativeImageInterface::Extension* extension = mImageSourcePtr->GetExtension();
- if( extension )
- extension->SetDestructorNotification(notification);
-
if( mWidgetImageView )
{
mWidgetImageView.SetImage( image );