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 |
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 ( ClientThreadAlive() ) |
363 if ( ClientThreadAlive() ) |
366 { |
364 { |
371 |
369 |
372 // if need to add scaled bitmap to pool |
370 // if need to add scaled bitmap to pool |
373 if (iBitmapToPool) |
371 if (iBitmapToPool) |
374 { |
372 { |
375 TN_DEBUG1("CThumbnailScaleTask()::StoreAndCompleteL() scaled bitmap to pool"); |
373 TN_DEBUG1("CThumbnailScaleTask()::StoreAndCompleteL() scaled bitmap to pool"); |
376 |
|
377 |
374 |
378 params.iBitmapHandle = iScaledBitmap->Handle(); |
375 params.iBitmapHandle = iScaledBitmap->Handle(); |
379 |
376 |
380 iServer.AddBitmapToPoolL( iRequestId.iSession, iScaledBitmap, iRequestId ); |
377 iServer.AddBitmapToPoolL( iRequestId.iSession, iScaledBitmap, iRequestId ); |
381 iScaledBitmapHandle = params.iBitmapHandle; |
378 iScaledBitmapHandle = params.iBitmapHandle; |