From 2d139bb2d6109a3b9b931e8435e0f7df01f3c594 Mon Sep 17 00:00:00 2001 From: "taeyoon0.lee" Date: Fri, 17 Mar 2017 21:17:55 +0900 Subject: [PATCH] [3.0] Added ref/unref tbm_surface Change-Id: I3c52d475da8a7c908d3a1da6d140fe36cec23714 --- adaptors/tizen/native-image-source-impl-tizen.cpp | 28 +++++++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/adaptors/tizen/native-image-source-impl-tizen.cpp b/adaptors/tizen/native-image-source-impl-tizen.cpp index c0e5da5..e83af6c 100755 --- a/adaptors/tizen/native-image-source-impl-tizen.cpp +++ b/adaptors/tizen/native-image-source-impl-tizen.cpp @@ -22,6 +22,7 @@ #include #include #include +#include // INTERNAL INCLUDES #include @@ -99,6 +100,7 @@ NativeImageSource::NativeImageSource( unsigned int width, unsigned int height, D if( mTbmSurface != NULL ) { + tbm_surface_internal_ref( mTbmSurface ); mBlendingRequired = CheckBlending( tbm_surface_get_format( mTbmSurface ) ); mWidth = tbm_surface_get_width( mTbmSurface ); mHeight = tbm_surface_get_height( mTbmSurface ); @@ -184,13 +186,20 @@ tbm_surface_h NativeImageSource::GetSurfaceFromAny( Any source ) const NativeImageSource::~NativeImageSource() { - if( mOwnTbmSurface && mTbmSurface != NULL ) + if( mOwnTbmSurface ) { - if( tbm_surface_destroy( mTbmSurface ) != TBM_SURFACE_ERROR_NONE ) + if( mTbmSurface != NULL && tbm_surface_destroy( mTbmSurface ) != TBM_SURFACE_ERROR_NONE ) { DALI_LOG_ERROR( "Failed to destroy tbm_surface\n" ); } } + else + { + if( mTbmSurface != NULL ) + { + tbm_surface_internal_unref( mTbmSurface ); + } + } } Any NativeImageSource::GetNativeImageSource() const @@ -310,9 +319,9 @@ bool NativeImageSource::EncodeToFile(const std::string& filename) const void NativeImageSource::SetSource( Any source ) { - if( mOwnTbmSurface && mTbmSurface != NULL ) + if( mOwnTbmSurface ) { - if( tbm_surface_destroy( mTbmSurface ) != TBM_SURFACE_ERROR_NONE ) + if( mTbmSurface != NULL && tbm_surface_destroy( mTbmSurface ) != TBM_SURFACE_ERROR_NONE ) { DALI_LOG_ERROR( "Failed to destroy tbm_surface\n" ); } @@ -320,12 +329,21 @@ void NativeImageSource::SetSource( Any source ) mTbmSurface = NULL; mOwnTbmSurface = false; } + else + { + if( mTbmSurface != NULL ) + { + tbm_surface_internal_unref( mTbmSurface ); + mTbmSurface = NULL; + } + } mTbmSurface = GetSurfaceFromAny( source ); - mSetSource = true; if( mTbmSurface != NULL ) { + mSetSource = true; + tbm_surface_internal_ref( mTbmSurface ); mBlendingRequired = CheckBlending( tbm_surface_get_format( mTbmSurface ) ); mWidth = tbm_surface_get_width( mTbmSurface ); mHeight = tbm_surface_get_height( mTbmSurface ); -- 2.7.4