X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Fimages%2Fbuffer-image-impl.cpp;h=c34dede406a3343b26c1e6152d8bf4da432fbb93;hb=e8820ac169f91c4bd0d5c7398cdea424efc8c751;hp=2b82133318aca3d50b85317b0d022dc93175d3a1;hpb=ff364987bf3c2ef5bb2b57348747eeb784d8ba90;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/event/images/buffer-image-impl.cpp b/dali/internal/event/images/buffer-image-impl.cpp index 2b82133..c34dede 100644 --- a/dali/internal/event/images/buffer-image-impl.cpp +++ b/dali/internal/event/images/buffer-image-impl.cpp @@ -23,10 +23,9 @@ // INTERNAL INCLUDES #include +#include #include -#include #include -#include using namespace Dali::Integration; @@ -46,6 +45,7 @@ BufferImagePtr BufferImage::New( unsigned int width, { BufferImagePtr internal = new BufferImage( width, height, pixelformat ); internal->Initialize(); + internal->Update( RectArea() ); return internal; } @@ -57,6 +57,7 @@ BufferImagePtr BufferImage::New( PixelBuffer* pixBuf, { BufferImagePtr internal = new BufferImage( pixBuf, width, height, pixelformat, stride ); internal->Initialize(); + internal->Update( RectArea() ); return internal; } @@ -64,7 +65,6 @@ BufferImage::BufferImage(unsigned int width, unsigned int height, Pixel::Format : Image(), mInternalBuffer( NULL ), mExternalBuffer( NULL ), - mResourceClient( NULL ), mBufferSize( 0 ), mByteStride( 0 ), mBytesPerPixel( 0 ), @@ -86,7 +86,6 @@ BufferImage::BufferImage(PixelBuffer* pixBuf, : Image(), mInternalBuffer( NULL ), mExternalBuffer( pixBuf ), - mResourceClient( NULL ), mBufferSize( 0 ), mByteStride( 0 ), mBytesPerPixel( 0 ), @@ -99,12 +98,6 @@ BufferImage::BufferImage(PixelBuffer* pixBuf, BufferImage::~BufferImage() { - if( mTicket ) - { - mTicket->RemoveObserver(*this); - mTicket.Reset(); - } - delete[] mInternalBuffer; } @@ -113,8 +106,6 @@ void BufferImage::SetupBuffer( unsigned int width, Pixel::Format pixelformat, unsigned int byteStride ) { - ThreadLocalStorage& tls = ThreadLocalStorage::Get(); - mResourceClient = &tls.GetResourceClient(); mWidth = width; mHeight = height; mPixelFormat = pixelformat; @@ -132,41 +123,25 @@ bool BufferImage::IsDataExternal() const return ( mExternalBuffer ? true : false ); } -void BufferImage::Update( RectArea& updateArea ) +void BufferImage::Update( const RectArea& updateArea ) { - if ( !mTicket ) + if ( !mTexture ) { - CreateHostBitmap(); + mTexture = Texture::New( Dali::TextureType::TEXTURE_2D, mPixelFormat, mWidth, mHeight ); } DALI_ASSERT_DEBUG( updateArea.x + updateArea.width <= mWidth && updateArea.y + updateArea.height <= mHeight ); - UploadArea( mTicket->GetId(), updateArea ); + UploadArea( updateArea ); } -void BufferImage::CreateHostBitmap() +void BufferImage::UploadArea( const RectArea& area ) { - Integration::Bitmap* bitmap = Bitmap::New( Bitmap::BITMAP_2D_PACKED_PIXELS, mResourcePolicy ); - Bitmap::PackedPixelsProfile* const packedBitmap = bitmap->GetPackedPixelsProfile(); - DALI_ASSERT_DEBUG(packedBitmap); - - packedBitmap->ReserveBuffer( mPixelFormat, mWidth, mHeight ); - DALI_ASSERT_DEBUG(bitmap->GetBuffer() != 0); - DALI_ASSERT_DEBUG(bitmap->GetBufferSize() >= mHeight * mWidth * mBytesPerPixel ); - - mTicket = mResourceClient->AddBitmapImage( bitmap ); - mTicket->AddObserver(*this); -} - -void BufferImage::UploadArea( ResourceId destId, const RectArea& area ) -{ - Integration::Bitmap* bitmap = Bitmap::New( Bitmap::BITMAP_2D_PACKED_PIXELS, mResourcePolicy ); - Bitmap::PackedPixelsProfile* const packedBitmap = bitmap->GetPackedPixelsProfile(); - DALI_ASSERT_DEBUG(packedBitmap); DALI_ASSERT_DEBUG( area.width <= mWidth && area.height <= mHeight ); mBufferWidth = area.width ? area.width : mWidth; - packedBitmap->ReserveBuffer( mPixelFormat, mBufferWidth, area.height ? area.height : mHeight ); - DALI_ASSERT_DEBUG(bitmap->GetBuffer() != 0); - DALI_ASSERT_DEBUG(bitmap->GetBufferSize() >= mBufferWidth * ( area.height ? area.height : mHeight ) * mBytesPerPixel ); + uint32_t bufferHeight = area.height ? area.height : mHeight; + size_t bufferSize = mBytesPerPixel * mBufferWidth * bufferHeight; + unsigned char* buffer = reinterpret_cast< Dali::Integration::PixelBuffer* >( malloc( bufferSize ) ); + DALI_ASSERT_DEBUG(buffer != 0); // Are we uploading from an external or internal buffer ? if ( mExternalBuffer ) @@ -174,11 +149,11 @@ void BufferImage::UploadArea( ResourceId destId, const RectArea& area ) // Check if we're doing the entire area without stride mismatch between source and dest ? if( ( mByteStride == mWidth * mBytesPerPixel ) && area.IsEmpty() ) { - memcpy( bitmap->GetBuffer(), mExternalBuffer, mBufferSize ); + memcpy( buffer, mExternalBuffer, mBufferSize ); } else { - UpdateBufferArea( mExternalBuffer, bitmap->GetBuffer(), area ); + UpdateBufferArea( mExternalBuffer, buffer, area ); } } else @@ -186,26 +161,17 @@ void BufferImage::UploadArea( ResourceId destId, const RectArea& area ) // Check if we're doing the entire internal buffer ? if( area.IsEmpty() ) { - memcpy( bitmap->GetBuffer(), mInternalBuffer, bitmap->GetBufferSize() ); + memcpy( buffer, mInternalBuffer, bufferSize ); } else { - UpdateBufferArea( mInternalBuffer, bitmap->GetBuffer(), area ); + UpdateBufferArea( mInternalBuffer, buffer, area ); } } - mResourceClient->UploadBitmap( destId, bitmap, area.x, area.y ); - -} - -void BufferImage::UploadBitmap( ResourceId destId, std::size_t xOffset, std::size_t yOffset ) -{ - RectArea area( xOffset, yOffset, 0, 0 ); - if ( !mTicket ) - { - CreateHostBitmap(); - } + PixelDataPtr pixelData = PixelData::New( buffer, bufferSize, mBufferWidth, bufferHeight, mPixelFormat, Dali::PixelData::FREE ); + mTexture->Upload( pixelData, 0u, 0u, area.x, area.y, mBufferWidth, bufferHeight ); - UploadArea( destId, area ); + UploadedSignal().Emit( Dali::Image( this ) ); } void BufferImage::UpdateBufferArea( PixelBuffer* src, PixelBuffer* dest, const RectArea& area ) @@ -223,20 +189,6 @@ void BufferImage::UpdateBufferArea( PixelBuffer* src, PixelBuffer* dest, const R } } -void BufferImage::Connect() -{ - if ( !mConnectionCount++ && !mTicket ) - { - RectArea area; - Update( area ); - } -} - -void BufferImage::Disconnect() -{ - --mConnectionCount; -} - } // namespace Internal } // namespace Dali