imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailscaletask.cpp
changeset 14 2edacbf5d3f9
parent 0 2014ca87e772
child 15 7197e789b953
equal deleted inserted replaced
1:235a7fc86938 14:2edacbf5d3f9
    39 //
    39 //
    40 CThumbnailScaleTask* CThumbnailScaleTask::NewL( CThumbnailTaskProcessor&
    40 CThumbnailScaleTask* CThumbnailScaleTask::NewL( CThumbnailTaskProcessor&
    41     aProcessor, CThumbnailServer& aServer, const TDesC& aFilename, CFbsBitmap*
    41     aProcessor, CThumbnailServer& aServer, const TDesC& aFilename, CFbsBitmap*
    42     aBitmap, const TSize& aOriginalSize, const TSize& aTargetSize, TBool aCrop,
    42     aBitmap, const TSize& aOriginalSize, const TSize& aTargetSize, TBool aCrop,
    43     TDisplayMode aDisplayMode, TInt aPriority, const TDesC& aTargetUri,
    43     TDisplayMode aDisplayMode, TInt aPriority, const TDesC& aTargetUri,
    44     const TThumbnailSize aThumbnailSize, const TThumbnailId aThumbnailId,
    44     const TThumbnailSize aThumbnailSize, const TInt64 aModified,
    45     TBool aBitmapToPool, const TBool aEXIF)
    45     TBool aBitmapToPool, const TBool aEXIF)
    46     {
    46     {
    47     // We take ownership of aBitmap
    47     // We take ownership of aBitmap
    48     CleanupStack::PushL( aBitmap );
    48     CleanupStack::PushL( aBitmap );
    49     CThumbnailScaleTask* self = new( ELeave )CThumbnailScaleTask( aProcessor,
    49     CThumbnailScaleTask* self = new( ELeave )CThumbnailScaleTask( aProcessor,
    50         aServer, aFilename, aBitmap, aOriginalSize, aTargetSize, aCrop,
    50         aServer, aFilename, aBitmap, aOriginalSize, aTargetSize, aCrop,
    51         aDisplayMode, aPriority, aTargetUri, aThumbnailSize, aThumbnailId,
    51         aDisplayMode, aPriority, aTargetUri, aThumbnailSize, aModified,
    52         aBitmapToPool, aEXIF);
    52         aBitmapToPool, aEXIF);
    53     CleanupStack::Pop( aBitmap );
    53     CleanupStack::Pop( aBitmap );
    54     CleanupStack::PushL( self );
    54     CleanupStack::PushL( self );
    55     self->ConstructL();
    55     self->ConstructL();
    56     CleanupStack::Pop( self );
    56     CleanupStack::Pop( self );
    65 //
    65 //
    66 CThumbnailScaleTask::CThumbnailScaleTask( CThumbnailTaskProcessor& aProcessor,
    66 CThumbnailScaleTask::CThumbnailScaleTask( CThumbnailTaskProcessor& aProcessor,
    67     CThumbnailServer& aServer, const TDesC& aFilename, CFbsBitmap* aBitmap,
    67     CThumbnailServer& aServer, const TDesC& aFilename, CFbsBitmap* aBitmap,
    68     const TSize& aOriginalSize, const TSize& aTargetSize, TBool aCrop,
    68     const TSize& aOriginalSize, const TSize& aTargetSize, TBool aCrop,
    69     TDisplayMode aDisplayMode, TInt aPriority, const TDesC& aTargetUri,
    69     TDisplayMode aDisplayMode, TInt aPriority, const TDesC& aTargetUri,
    70     const TThumbnailSize aThumbnailSize, const TThumbnailId aThumbnailId,
    70     const TThumbnailSize aThumbnailSize, const TInt64 aModified,
    71     TBool aBitmapToPool, const TBool aEXIF):
    71     TBool aBitmapToPool, const TBool aEXIF):
    72     CThumbnailTask( aProcessor, aPriority ), iServer( aServer ), iOwnBitmap( aBitmap ),
    72     CThumbnailTask( aProcessor, aPriority ), iServer( aServer ), iOwnBitmap( aBitmap ),
    73     iOriginalSize( aOriginalSize ), iTargetSize( aTargetSize ), iCrop( aCrop ),
    73     iOriginalSize( aOriginalSize ), iTargetSize(aTargetSize), iTargetSizeTN( aTargetSize ), iCrop( aCrop ),
    74     iDisplayMode( aDisplayMode ), iFilename( aFilename ), iTargetUri( aTargetUri ),
    74     iDisplayMode( aDisplayMode ), iFilename( aFilename ), iTargetUri( aTargetUri ),
    75     iThumbnailSize(aThumbnailSize), iThumbnailId(aThumbnailId),
    75     iThumbnailSize(aThumbnailSize), iModified(aModified),
    76     iBitmapToPool(aBitmapToPool), iEXIF(aEXIF)
    76     iBitmapToPool(aBitmapToPool), iEXIF(aEXIF)
    77     {
    77     {
    78     TN_DEBUG2( "CThumbnailScaleTask(0x%08x)::CThumbnailScaleTask()", this );
    78     TN_DEBUG2( "CThumbnailScaleTask(0x%08x)::CThumbnailScaleTask()", this );
    79     }
    79     }
    80 
    80 
    84 // Symbian 2nd phase constructor can leave.
    84 // Symbian 2nd phase constructor can leave.
    85 // ---------------------------------------------------------------------------
    85 // ---------------------------------------------------------------------------
    86 //
    86 //
    87 void CThumbnailScaleTask::ConstructL()
    87 void CThumbnailScaleTask::ConstructL()
    88     {
    88     {
    89     iServer.AddBitmapToPoolL( NULL, iOwnBitmap );
    89     iServer.AddBitmapToPoolL( iRequestId.iSession, iOwnBitmap, iRequestId );
    90 
    90 
    91     // Successfully added bitmap to pool, we are no longer responsible for
    91     // Successfully added bitmap to pool, we are no longer responsible for
    92     // deleting it directly.
    92     // deleting it directly.
    93     iBitmap = iOwnBitmap;
    93     iBitmap = iOwnBitmap;
    94     iOwnBitmap = NULL;
    94     iOwnBitmap = NULL;
   324 // CThumbnailScaleTask::StoreAndCompleteL()
   324 // CThumbnailScaleTask::StoreAndCompleteL()
   325 // ---------------------------------------------------------------------------
   325 // ---------------------------------------------------------------------------
   326 //
   326 //
   327 void CThumbnailScaleTask::StoreAndCompleteL()
   327 void CThumbnailScaleTask::StoreAndCompleteL()
   328     {
   328     {
   329     TN_DEBUG5( "CThumbnailScaleTask(0x%08x)::StoreAndCompleteL() iFilename=%S, iBitmap=0x%08x, iScaledBitmap=0x%08x)", 
   329     TN_DEBUG6( "CThumbnailScaleTask(0x%08x)::StoreAndCompleteL() iFilename=%S, iThumbnailSize=%d, iBitmap=0x%08x, iScaledBitmap=0x%08x)", 
   330                this, &iFilename, iBitmap, iScaledBitmap );
   330                this, &iFilename, iThumbnailSize, iBitmap, iScaledBitmap );
   331 		 
   331 		 
   332     // do not store TN if quality is too low eg. orignal size of image is smaller than requested size
   332     // do not store TN if quality is too low eg. orignal size of image is smaller than requested size
   333     // (do not store upscaled images)
   333     // (do not store upscaled images)
   334     if ( iTargetSize.iWidth >= iOriginalSize.iWidth && 
   334     if ( (iTargetSizeTN.iWidth > iOriginalSize.iWidth || iTargetSizeTN.iHeight > iOriginalSize.iHeight) && iEXIF)
   335          iTargetSize.iHeight >= iOriginalSize.iHeight && iEXIF)
       
   336         {
   335         {
   337         TN_DEBUG1("CThumbnailScaleTask()::StoreAndCompleteL() too low quality");
   336         TN_DEBUG1("CThumbnailScaleTask()::StoreAndCompleteL() too low quality");
   338         //don't store preview image
       
   339         iDoStore = EFalse;
   337         iDoStore = EFalse;
   340         }
   338         }
   341     
   339     
   342     TN_DEBUG3("CThumbnailScaleTask(0x%08x)::StoreAndCompleteL() iDoStore = %d", this, iDoStore);
   340     TN_DEBUG3("CThumbnailScaleTask(0x%08x)::StoreAndCompleteL() iDoStore = %d", this, iDoStore);
   343     
   341     
   346         if (iTargetUri != KNullDesC)
   344         if (iTargetUri != KNullDesC)
   347             {
   345             {
   348             if (iFilename != KNullDesC && iFilename.CompareF(iTargetUri) == 0)
   346             if (iFilename != KNullDesC && iFilename.CompareF(iTargetUri) == 0)
   349                 {
   347                 {
   350                 // filename and target URI match, so thumb created from associated path
   348                 // filename and target URI match, so thumb created from associated path
   351                 iServer.StoreThumbnailL( iTargetUri, iScaledBitmap, iOriginalSize, iCrop, iThumbnailSize, iThumbnailId, ETrue );
   349                 iServer.StoreThumbnailL( iTargetUri, iScaledBitmap, iOriginalSize, iCrop, iThumbnailSize, iModified, ETrue );
   352                 }
   350                 }
   353             else
   351             else
   354                 {
   352                 {
   355                 // thumb not created from associated path
   353                 // thumb not created from associated path
   356                 iServer.StoreThumbnailL( iTargetUri, iScaledBitmap, iOriginalSize, iCrop, iThumbnailSize, iThumbnailId, EFalse, EFalse );
   354                 iServer.StoreThumbnailL( iTargetUri, iScaledBitmap, iOriginalSize, iCrop, iThumbnailSize, iModified, EFalse, EFalse );
   357                 }  
   355                 }  
   358             }
   356             }
   359         else if (iFilename != KNullDesC)
   357         else if (iFilename != KNullDesC)
   360             {
   358             {
   361             iServer.StoreThumbnailL( iFilename, iScaledBitmap, iOriginalSize, iCrop, iThumbnailSize, iThumbnailId, ETrue );
   359             iServer.StoreThumbnailL( iFilename, iScaledBitmap, iOriginalSize, iCrop, iThumbnailSize, iModified, ETrue );
   362             }
   360             }
   363         }    
   361         }    
   364     
   362     
   365     if ( iMessage.Handle() )
   363     if ( ClientThreadAlive() )
   366         {
   364         {
   367         TN_DEBUG1("CThumbnailScaleTask()::StoreAndCompleteL() scaled bitmap handle to params");
   365         TN_DEBUG1("CThumbnailScaleTask()::StoreAndCompleteL() scaled bitmap handle to params");
   368         
   366         
   369     	TThumbnailRequestParams& params = iParamsBuf();
   367         TThumbnailRequestParams& params = iParamsBuf();
   370 		iMessage.ReadL( 0, iParamsBuf );
   368         iMessage.ReadL( 0, iParamsBuf );
   371 		params.iBitmapHandle = iScaledBitmap->Handle();
   369                     
   372 	   
       
   373         // if need to add scaled bitmap to pool
   370         // if need to add scaled bitmap to pool
   374         if (iBitmapToPool)
   371         if (iBitmapToPool)
   375             {
   372             {
   376             TN_DEBUG1("CThumbnailScaleTask()::StoreAndCompleteL() scaled bitmap to pool");
   373             TN_DEBUG1("CThumbnailScaleTask()::StoreAndCompleteL() scaled bitmap to pool");
   377             
   374             
   378             iServer.AddBitmapToPoolL( iRequestId.iSession, iScaledBitmap );
   375             params.iBitmapHandle = iScaledBitmap->Handle();
       
   376             
       
   377             iServer.AddBitmapToPoolL( iRequestId.iSession, iScaledBitmap, iRequestId );
   379             iScaledBitmapHandle = params.iBitmapHandle;
   378             iScaledBitmapHandle = params.iBitmapHandle;
   380             }    
   379             }    
   381 		
   380 		
   382 	    if( params.iQualityPreference == CThumbnailManager::EOptimizeForQualityWithPreview
   381 	    if( params.iQualityPreference == CThumbnailManager::EOptimizeForQualityWithPreview
   383 	        && iEXIF && !iDoStore)
   382 	        && iEXIF && !iDoStore)