X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=dali%2Finternal%2Fevent%2Fimages%2Fencoded-buffer-image-impl.cpp;h=d69d23ec16b4a51eaf12d2b5ef9fbc659e6a2673;hb=ff364987bf3c2ef5bb2b57348747eeb784d8ba90;hp=0d3faf8de9dbcd15bd24859e95095365588e0344;hpb=27619bbc4c1d443e89a6cdd116e544f6d9657fa4;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/event/images/encoded-buffer-image-impl.cpp b/dali/internal/event/images/encoded-buffer-image-impl.cpp index 0d3faf8..d69d23e 100644 --- a/dali/internal/event/images/encoded-buffer-image-impl.cpp +++ b/dali/internal/event/images/encoded-buffer-image-impl.cpp @@ -18,6 +18,9 @@ // CLASS HEADER #include +// EXTERNAL INCLUDES +#include // for memcpy + // INTERNAL INCLUDES #include #include @@ -35,9 +38,9 @@ TypeRegistration mType( typeid( Dali::EncodedBufferImage ), typeid( Dali::Image } // unnamed namespace EncodedBufferImagePtr EncodedBufferImage::New( const uint8_t * const encodedImage, - const std::size_t encodedImageByteCount, - const ImageAttributes& attributes, - const ReleasePolicy releasePol ) + std::size_t encodedImageByteCount, + ImageDimensions size, FittingMode::Type fittingMode, SamplingMode::Type samplingMode, + bool orientationCorrection ) { DALI_ASSERT_DEBUG( encodedImage && "Null image pointer passed-in for decoding from memory." ); DALI_ASSERT_DEBUG( encodedImageByteCount > 0U && "Zero size passed for image resource in memory buffer." ); @@ -46,11 +49,11 @@ EncodedBufferImagePtr EncodedBufferImage::New( const uint8_t * const encodedImag // input buffer by reading both ends of it: DALI_ASSERT_ALWAYS( static_cast( encodedImage[0] + encodedImage[encodedImageByteCount-1] ) != -1 ); - EncodedBufferImagePtr image( new EncodedBufferImage( releasePol ) ); + EncodedBufferImagePtr image( new EncodedBufferImage() ); image->Initialize(); // Second stage initialization // Replicate the functionality of ImageFactory::load() without the filesystem caching: - Dali::Integration::BitmapResourceType resourceType( attributes ); + Dali::Integration::BitmapResourceType resourceType( size, fittingMode, samplingMode, orientationCorrection ); RequestBufferPtr buffer( new RequestBuffer ); buffer->GetVector().Resize( encodedImageByteCount ); // Resize() won't throw on failure, so avoid a SEGV if the allocation failed: @@ -59,20 +62,19 @@ EncodedBufferImagePtr EncodedBufferImage::New( const uint8_t * const encodedImag memcpy( &(buffer->GetVector()[0]), encodedImage, encodedImageByteCount ); // Get image size from buffer - Vector2 size; - Internal::ThreadLocalStorage::Get().GetPlatformAbstraction().GetClosestImageSize( buffer, attributes, size ); - image->mWidth = (unsigned int) size.width; - image->mHeight = (unsigned int) size.height; + Dali::Integration::PlatformAbstraction& platformAbstraction = Internal::ThreadLocalStorage::Get().GetPlatformAbstraction(); + const ImageDimensions expectedSize = platformAbstraction.GetClosestImageSize( buffer, size, fittingMode, samplingMode, orientationCorrection ); + image->mWidth = (unsigned int) expectedSize.GetWidth(); + image->mHeight = (unsigned int) expectedSize.GetHeight(); - ResourceClient &resourceClient = ThreadLocalStorage::Get().GetResourceClient(); - ResourceTicketPtr ticket = resourceClient.DecodeResource( resourceType, buffer ); - if( ticket ) - { - DALI_ASSERT_DEBUG( dynamic_cast( ticket.Get() ) && "Resource ticket returned for image resource has to be an ImageTicket subclass.\n" ); - ImageTicket * const imageTicket = static_cast( ticket.Get() ); + // Load the image synchronously + Integration::BitmapPtr bitmap = platformAbstraction.DecodeBuffer( resourceType, &(buffer->GetVector()[0]), encodedImageByteCount ); - image->mTicket = imageTicket; - imageTicket->AddObserver( *image ); + if( bitmap ) + { + ResourceClient &resourceClient = ThreadLocalStorage::Get().GetResourceClient(); + image->mTicket = resourceClient.AddBitmapImage( bitmap.Get() ); + image->mTicket->AddObserver( *image ); } return image;