--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailscaletask.cpp Fri Mar 19 09:35:30 2010 +0200
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailscaletask.cpp Fri Apr 16 15:16:16 2010 +0300
@@ -42,14 +42,14 @@
aBitmap, const TSize& aOriginalSize, const TSize& aTargetSize, TBool aCrop,
TDisplayMode aDisplayMode, TInt aPriority, const TDesC& aTargetUri,
const TThumbnailSize aThumbnailSize, const TInt64 aModified,
- TBool aBitmapToPool, const TBool aEXIF)
+ TBool aBitmapToPool, const TBool aEXIF, const TThumbnailServerRequestId aRequestId)
{
// We take ownership of aBitmap
CleanupStack::PushL( aBitmap );
CThumbnailScaleTask* self = new( ELeave )CThumbnailScaleTask( aProcessor,
aServer, aFilename, aBitmap, aOriginalSize, aTargetSize, aCrop,
aDisplayMode, aPriority, aTargetUri, aThumbnailSize, aModified,
- aBitmapToPool, aEXIF);
+ aBitmapToPool, aEXIF, aRequestId);
CleanupStack::Pop( aBitmap );
CleanupStack::PushL( self );
self->ConstructL();
@@ -68,7 +68,7 @@
const TSize& aOriginalSize, const TSize& aTargetSize, TBool aCrop,
TDisplayMode aDisplayMode, TInt aPriority, const TDesC& aTargetUri,
const TThumbnailSize aThumbnailSize, const TInt64 aModified,
- TBool aBitmapToPool, const TBool aEXIF):
+ TBool aBitmapToPool, const TBool aEXIF, const TThumbnailServerRequestId aRequestId):
CThumbnailTask( aProcessor, aPriority ), iServer( aServer ), iOwnBitmap( aBitmap ),
iOriginalSize( aOriginalSize ), iTargetSize(aTargetSize), iTargetSizeTN( aTargetSize ), iCrop( aCrop ),
iDisplayMode( aDisplayMode ), iFilename( aFilename ), iTargetUri( aTargetUri ),
@@ -76,6 +76,8 @@
iBitmapToPool(aBitmapToPool), iEXIF(aEXIF)
{
TN_DEBUG2( "CThumbnailScaleTask(0x%08x)::CThumbnailScaleTask()", this );
+
+ iRequestId = aRequestId;
}
@@ -95,7 +97,6 @@
iBitmapInPool = ETrue;
iScaledBitmap = NULL;
- iScaledBitmapHandle = 0;
}
@@ -116,14 +117,6 @@
iServer.DeleteBitmapFromPool( iBitmap->Handle());
}
- if ( iScaledBitmapHandle )
- {
- TN_DEBUG1("CThumbnailScaleTask()::~CThumbnailScaleTask() delete scaled bitmap from pool");
-
- // Scaled bitmap is owned by server, decrease reference count
- iServer.DeleteBitmapFromPool( iScaledBitmapHandle );
- }
-
// Scaled bitmap is owned by us, delete now
delete iScaledBitmap;
}
@@ -150,6 +143,8 @@
CalculateCropRectangle();
}
+ TN_DEBUG2( "CThumbnailScaleTask(0x%08x)::StartL() - sizes calculated", this );
+
#ifdef _DEBUG
aStart.UniversalTime();
#endif
@@ -162,6 +157,8 @@
if(bitmapSize.iHeight == iTargetSize.iHeight && bitmapSize.iWidth == iTargetSize.iWidth)
{
+ TN_DEBUG2( "CThumbnailScaleTask(0x%08x)::StartL() - no need for scaling", this);
+
// copy bitmap 1:1
User::LeaveIfError( iScaledBitmap->Create( bitmapSize, iBitmap->DisplayMode() ));
CFbsBitmapDevice* device = CFbsBitmapDevice::NewL(iScaledBitmap);
@@ -172,7 +169,6 @@
gc->BitBlt(TPoint(0, 0), iBitmap);
CleanupStack::PopAndDestroy(2, device); // gc
- TN_DEBUG2( "CThumbnailScaleTask(0x%08x)::StartL() - no need for scaling", this);
TRAPD( err, StoreAndCompleteL());
Complete( err );
ResetMessageData();
@@ -180,11 +176,13 @@
else
{
TN_DEBUG2( "CThumbnailScaleTask(0x%08x)::StartL() - scaling", this);
+
User::LeaveIfError( iScaledBitmap->Create( iTargetSize, iBitmap->DisplayMode() ));
iServer.ScaleBitmapL( iStatus, * iBitmap, * iScaledBitmap, iCropRectangle );
SetActive();
- }
-
+ }
+
+ TN_DEBUG2( "CThumbnailScaleTask(0x%08x)::StartL() end", this );
}
@@ -362,46 +360,38 @@
if ( ClientThreadAlive() )
{
- TN_DEBUG1("CThumbnailScaleTask()::StoreAndCompleteL() scaled bitmap handle to params");
-
TThumbnailRequestParams& params = iParamsBuf();
iMessage.ReadL( 0, iParamsBuf );
// if need to add scaled bitmap to pool
if (iBitmapToPool)
{
- TN_DEBUG1("CThumbnailScaleTask()::StoreAndCompleteL() scaled bitmap to pool");
+ TN_DEBUG1("CThumbnailScaleTask()::StoreAndCompleteL() scaled bitmap handle to params");
params.iBitmapHandle = iScaledBitmap->Handle();
-
- iServer.AddBitmapToPoolL( iRequestId.iSession, iScaledBitmap, iRequestId );
- iScaledBitmapHandle = params.iBitmapHandle;
}
if( params.iQualityPreference == CThumbnailManager::EOptimizeForQualityWithPreview
&& iEXIF && !iDoStore)
{
+ TN_DEBUG1("CThumbnailScaleTask()::StoreAndCompleteL() EThumbnailPreviewThumbnail");
+
// this is upscaled preview image
params.iControlFlags = EThumbnailPreviewThumbnail;
- TN_DEBUG1("CThumbnailScaleTask()::StoreAndCompleteL() EThumbnailPreviewThumbnail");
}
-
- // Server owns the bitmap now. If the code below leaves, we will
- // release the bitmap reference in destructor using iScaledBitmapHandle.
- if (iBitmapToPool)
- {
- iScaledBitmap = NULL;
- }
TN_DEBUG1("CThumbnailScaleTask()::StoreAndCompleteL() write params to message");
// pass bitmap handle to client
iMessage.WriteL( 0, iParamsBuf );
- // Successfully completed the message. The client will send
- // EReleaseBitmap message later to delete the bitmap from pool.
- // CThumbnailScaleTask is no longer responsible for that.
- iScaledBitmapHandle = 0;
+ if (iBitmapToPool)
+ {
+ TN_DEBUG1("CThumbnailScaleTask()::StoreAndCompleteL() scaled bitmap to pool");
+
+ iServer.AddBitmapToPoolL( iRequestId.iSession, iScaledBitmap, iRequestId );
+ iScaledBitmap = NULL; // Server owns the bitmap now
+ }
}
TN_DEBUG1("CThumbnailScaleTask()::StoreAndCompleteL() - end");