imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailscaletask.cpp
changeset 15 7197e789b953
parent 14 2edacbf5d3f9
child 29 4bdfb6b5c9b4
--- 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");