27 #include "thumbnailtaskprocessor.h" |
27 #include "thumbnailtaskprocessor.h" |
28 #include "thumbnailmanagerconstants.h" |
28 #include "thumbnailmanagerconstants.h" |
29 #include "thumbnaillog.h" |
29 #include "thumbnaillog.h" |
30 #include "thumbnailpanic.h" |
30 #include "thumbnailpanic.h" |
31 #include "thumbnailfetchedchecker.h" |
31 #include "thumbnailfetchedchecker.h" |
32 #include "OstTraceDefinitions.h" |
|
33 #ifdef OST_TRACE_COMPILER_IN_USE |
|
34 #include "thumbnailgeneratetaskTraces.h" |
|
35 #endif |
|
36 |
|
37 |
32 |
38 // ======== MEMBER FUNCTIONS ======== |
33 // ======== MEMBER FUNCTIONS ======== |
39 |
34 |
40 // --------------------------------------------------------------------------- |
35 // --------------------------------------------------------------------------- |
41 // CThumbnailGenerateTask::CThumbnailGenerateTask() |
36 // CThumbnailGenerateTask::CThumbnailGenerateTask() |
55 iMissingSizes( aMissingSizes ), iTargetUri( aTargetUri ), |
50 iMissingSizes( aMissingSizes ), iTargetUri( aTargetUri ), |
56 iThumbnailSize( aThumbnailSize ), iModified(aModified), |
51 iThumbnailSize( aThumbnailSize ), iModified(aModified), |
57 iQualityPreference( aQualityPreference ), iVirtualUri( aVirtualUri ) |
52 iQualityPreference( aQualityPreference ), iVirtualUri( aVirtualUri ) |
58 { |
53 { |
59 TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CThumbnailGenerateTask()", this); |
54 TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CThumbnailGenerateTask()", this); |
60 OstTrace1( TRACE_NORMAL, CTHUMBNAILGENERATETASK_CTHUMBNAILGENERATETASK, "CThumbnailGenerateTask::CThumbnailGenerateTask;this=%o", this ); |
|
61 |
55 |
62 if ( !aBuffer && aFile) |
56 if ( !aBuffer && aFile) |
63 { |
57 { |
64 iFile = *aFile; |
58 iFile = *aFile; |
65 iFile.FullName( iFilename ); |
59 iFile.FullName( iFilename ); |
115 delete iBuffer; |
108 delete iBuffer; |
116 iBuffer = NULL; |
109 iBuffer = NULL; |
117 |
110 |
118 iFile.Close(); |
111 iFile.Close(); |
119 TN_DEBUG1("CThumbnailGenerateTask::~CThumbnailGenerateTask() - file handle closed"); |
112 TN_DEBUG1("CThumbnailGenerateTask::~CThumbnailGenerateTask() - file handle closed"); |
120 OstTrace0( TRACE_NORMAL, DUP2_CTHUMBNAILGENERATETASK_CTHUMBNAILGENERATETASK, "CThumbnailGenerateTask::~CThumbnailGenerateTask - file handle closed" ); |
|
121 } |
113 } |
122 |
114 |
123 |
115 |
124 // --------------------------------------------------------------------------- |
116 // --------------------------------------------------------------------------- |
125 // CThumbnailGenerateTask::StartL() |
117 // CThumbnailGenerateTask::StartL() |
126 // --------------------------------------------------------------------------- |
118 // --------------------------------------------------------------------------- |
127 // |
119 // |
128 void CThumbnailGenerateTask::StartL() |
120 void CThumbnailGenerateTask::StartL() |
129 { |
121 { |
130 TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::StartL()", this ); |
122 TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::StartL()", this ); |
131 OstTrace1( TRACE_NORMAL, CTHUMBNAILGENERATETASK_STARTL, "CThumbnailGenerateTask::StartL;this=%o", this ); |
|
132 |
123 |
133 CThumbnailTask::StartL(); |
124 CThumbnailTask::StartL(); |
134 |
125 |
135 #ifdef _DEBUG |
126 #ifdef _DEBUG |
136 aStart.UniversalTime(); |
127 aStart.UniversalTime(); |
148 mimeType = iMimeType.Des8(); |
139 mimeType = iMimeType.Des8(); |
149 } |
140 } |
150 iProvider = iServer.ResolveProviderL(mimeType); |
141 iProvider = iServer.ResolveProviderL(mimeType); |
151 |
142 |
152 TN_DEBUG3( "CThumbnailGenerateTask(0x%08x) -- provider UID 0x%08x", this, iProvider->Uid()); |
143 TN_DEBUG3( "CThumbnailGenerateTask(0x%08x) -- provider UID 0x%08x", this, iProvider->Uid()); |
153 OstTrace1( TRACE_NORMAL, DUP1_CTHUMBNAILGENERATETASK_STARTL, "CThumbnailGenerateTask::StartL;this=%o", this ); |
|
154 |
144 |
155 __ASSERT_DEBUG(( iProvider ), ThumbnailPanic( EThumbnailNullPointer )); |
145 __ASSERT_DEBUG(( iProvider ), ThumbnailPanic( EThumbnailNullPointer )); |
156 |
146 |
157 iProvider->CancelGetThumbnail(); |
147 iProvider->CancelGetThumbnail(); |
158 iProvider->Reset(); |
148 iProvider->Reset(); |
186 DoBlacklisting( providerErr, TSize(0,0) ); |
176 DoBlacklisting( providerErr, TSize(0,0) ); |
187 |
177 |
188 User::LeaveIfError( providerErr ); |
178 User::LeaveIfError( providerErr ); |
189 |
179 |
190 TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::StartL() end", this ); |
180 TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::StartL() end", this ); |
191 OstTrace1( TRACE_NORMAL, DUP2_CTHUMBNAILGENERATETASK_STARTL, "CThumbnailGenerateTask::StartL -end;this=%o", this ); |
|
192 } |
181 } |
193 |
182 |
194 |
183 |
195 // --------------------------------------------------------------------------- |
184 // --------------------------------------------------------------------------- |
196 // CThumbnailGenerateTask::RunL() |
185 // CThumbnailGenerateTask::RunL() |
284 void CThumbnailGenerateTask::ThumbnailProviderReady( const TInt aError, |
272 void CThumbnailGenerateTask::ThumbnailProviderReady( const TInt aError, |
285 CFbsBitmap* aBitmap, const TSize& aOriginalSize, const TBool aEXIF, const TBool aPortrait ) |
273 CFbsBitmap* aBitmap, const TSize& aOriginalSize, const TBool aEXIF, const TBool aPortrait ) |
286 { |
274 { |
287 TN_DEBUG4( |
275 TN_DEBUG4( |
288 "CThumbnailGenerateTask(0x%08x)::ThumbnailProviderReady(aError=%d, aBitmap=0x%08x)", this, aError, aBitmap ); |
276 "CThumbnailGenerateTask(0x%08x)::ThumbnailProviderReady(aError=%d, aBitmap=0x%08x)", this, aError, aBitmap ); |
289 OstTrace1( TRACE_NORMAL, CTHUMBNAILGENERATETASK_THUMBNAILPROVIDERREADY, "CThumbnailGenerateTask::ThumbnailProviderReady;this=%o", this ); |
|
290 OstTrace1( TRACE_NORMAL, DUP1_CTHUMBNAILGENERATETASK_THUMBNAILPROVIDERREADY, "CThumbnailGenerateTask::ThumbnailProviderReady;aError=%d", aError ); |
|
291 OstTrace1( TRACE_NORMAL, DUP2_CTHUMBNAILGENERATETASK_THUMBNAILPROVIDERREADY, "CThumbnailGenerateTask::ThumbnailProviderReady;aBitmap=%o", aBitmap ); |
|
292 |
277 |
293 #ifdef _DEBUG |
278 #ifdef _DEBUG |
294 aStop.UniversalTime(); |
279 aStop.UniversalTime(); |
295 TN_DEBUG2( "CThumbnailGenerateTask::ThumbnailProviderReady() generate took %d ms", (TInt)aStop.MicroSecondsFrom(aStart).Int64()/1000); |
280 TN_DEBUG2( "CThumbnailGenerateTask::ThumbnailProviderReady() generate took %d ms", (TInt)aStop.MicroSecondsFrom(aStart).Int64()/1000); |
296 #endif |
281 #endif |
312 { |
297 { |
313 // CreateScaleTasksL will take ownership of bitmap |
298 // CreateScaleTasksL will take ownership of bitmap |
314 |
299 |
315 #ifdef _DEBUG |
300 #ifdef _DEBUG |
316 TN_DEBUG2( "CThumbnailGenerateTask::ThumbnailProviderReady() - displaymode is %d", aBitmap->DisplayMode()); |
301 TN_DEBUG2( "CThumbnailGenerateTask::ThumbnailProviderReady() - displaymode is %d", aBitmap->DisplayMode()); |
317 OstTrace1( TRACE_NORMAL, DUP3_CTHUMBNAILGENERATETASK_THUMBNAILPROVIDERREADY, "CThumbnailGenerateTask::ThumbnailProviderReady;aBitmap->DisplayMode()=%u", aBitmap->DisplayMode() ); |
|
318 #endif |
302 #endif |
319 |
303 |
320 TRAPD( err, CreateScaleTasksL( aBitmap )); |
304 TRAPD( err, CreateScaleTasksL( aBitmap )); |
321 aBitmap = NULL; |
305 aBitmap = NULL; |
322 // If CreateScaleTasksL left, we are responsible for completing |
306 // If CreateScaleTasksL left, we are responsible for completing |
372 for ( TInt i( 0 ); i < count; i++ ) |
356 for ( TInt i( 0 ); i < count; i++ ) |
373 { |
357 { |
374 TThumbnailSize size = (*iMissingSizes)[ i ].iType; |
358 TThumbnailSize size = (*iMissingSizes)[ i ].iType; |
375 #ifdef _DEBUG |
359 #ifdef _DEBUG |
376 TN_DEBUG3( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() *iMissingSizes)[ i ].iType == %d", this, size ); |
360 TN_DEBUG3( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() *iMissingSizes)[ i ].iType == %d", this, size ); |
377 OstTrace1( TRACE_NORMAL, CTHUMBNAILGENERATETASK_CREATESCALETASKSL, "CThumbnailGenerateTask::CreateScaleTasksL;this=%o", this ); |
|
378 OstTrace1( TRACE_NORMAL, DUP1_CTHUMBNAILGENERATETASK_CREATESCALETASKSL, "CThumbnailGenerateTask::CreateScaleTasksL;size=%d", size ); |
|
379 #endif |
361 #endif |
380 |
362 |
381 if ( iPortrait ) |
363 if ( iPortrait ) |
382 { |
364 { |
383 if ( size == EFullScreenThumbnailSize || |
365 if ( size == EFullScreenThumbnailSize || |
384 size == EVideoFullScreenThumbnailSize || |
366 size == EVideoFullScreenThumbnailSize || |
385 size == EAudioFullScreenThumbnailSize || |
367 size == EAudioFullScreenThumbnailSize || |
386 size == EImageFullScreenThumbnailSize ) |
368 size == EImageFullScreenThumbnailSize ) |
387 { |
369 { |
388 TInt mis_width = (*iMissingSizes)[ i ].iSize.iWidth; |
|
389 TN_DEBUG2( "*iMissingSizes)[ i ].iWidth == %d", (*iMissingSizes)[ i ].iSize.iWidth ); |
370 TN_DEBUG2( "*iMissingSizes)[ i ].iWidth == %d", (*iMissingSizes)[ i ].iSize.iWidth ); |
390 OstTrace1( TRACE_NORMAL, DUP2_CTHUMBNAILGENERATETASK_CREATESCALETASKSL, "CThumbnailGenerateTask::CreateScaleTasksL;width=%d", mis_width ); |
|
391 |
|
392 TInt mis_height = (*iMissingSizes)[ i ].iSize.iHeight; |
|
393 TN_DEBUG2( "*iMissingSizes)[ i ].iHeight == %d", (*iMissingSizes)[ i ].iSize.iHeight ); |
371 TN_DEBUG2( "*iMissingSizes)[ i ].iHeight == %d", (*iMissingSizes)[ i ].iSize.iHeight ); |
394 OstTrace1( TRACE_NORMAL, DUP3_CTHUMBNAILGENERATETASK_CREATESCALETASKSL, "CThumbnailGenerateTask::CreateScaleTasksL;mis_height=%d", mis_height ); |
|
395 TInt width = (*iMissingSizes)[ i ].iSize.iWidth; |
372 TInt width = (*iMissingSizes)[ i ].iSize.iWidth; |
396 (*iMissingSizes)[ i ].iSize.iWidth = (*iMissingSizes)[ i ].iSize.iHeight; |
373 (*iMissingSizes)[ i ].iSize.iWidth = (*iMissingSizes)[ i ].iSize.iHeight; |
397 (*iMissingSizes)[ i ].iSize.iHeight = width; |
374 (*iMissingSizes)[ i ].iSize.iHeight = width; |
398 TN_DEBUG2( "*iMissingSizes)[ i ].iWidth == %d", (*iMissingSizes)[ i ].iSize.iWidth ); |
375 TN_DEBUG2( "*iMissingSizes)[ i ].iWidth == %d", (*iMissingSizes)[ i ].iSize.iWidth ); |
399 OstTrace1( TRACE_NORMAL, DUP4_CTHUMBNAILGENERATETASK_CREATESCALETASKSL, "CThumbnailGenerateTask::CreateScaleTasksL;width=%d", width ); |
|
400 mis_height = (*iMissingSizes)[ i ].iSize.iHeight; |
|
401 TN_DEBUG2( "*iMissingSizes)[ i ].iHeight == %d", (*iMissingSizes)[ i ].iSize.iHeight ); |
376 TN_DEBUG2( "*iMissingSizes)[ i ].iHeight == %d", (*iMissingSizes)[ i ].iSize.iHeight ); |
402 OstTrace1( TRACE_NORMAL, DUP5_CTHUMBNAILGENERATETASK_CREATESCALETASKSL, "CThumbnailGenerateTask::CreateScaleTasksL;mis_height=%d", mis_height ); |
|
403 } |
377 } |
404 } |
378 } |
405 |
379 |
406 CThumbnailScaleTask* complTask = CThumbnailScaleTask::NewL( iProcessor, iServer, iFilename, |
380 CThumbnailScaleTask* complTask = CThumbnailScaleTask::NewL( iProcessor, iServer, iFilename, |
407 aBitmap, iOriginalSize, (*iMissingSizes)[ i ].iSize, (*iMissingSizes)[ i ].iCrop, iDisplayMode, |
381 aBitmap, iOriginalSize, (*iMissingSizes)[ i ].iSize, (*iMissingSizes)[ i ].iCrop, iDisplayMode, |
417 (*iMissingSizes)[ i ].iType == ECustomThumbnailSize || |
391 (*iMissingSizes)[ i ].iType == ECustomThumbnailSize || |
418 (*iMissingSizes)[ i ].iType == EUnknownThumbnailSize ) |
392 (*iMissingSizes)[ i ].iType == EUnknownThumbnailSize ) |
419 { |
393 { |
420 complTask->SetDoStore( EFalse ); |
394 complTask->SetDoStore( EFalse ); |
421 TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() - do not store", this ); |
395 TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() - do not store", this ); |
422 OstTrace1( TRACE_NORMAL, DUP6_CTHUMBNAILGENERATETASK_CREATESCALETASKSL, "CThumbnailGenerateTask::CreateScaleTasksL - do not store;this=%o", this ); |
|
423 } |
396 } |
424 else |
397 else |
425 { |
398 { |
426 complTask->SetDoStore( ETrue ); |
399 complTask->SetDoStore( ETrue ); |
427 } |
400 } |
467 iThumbnailSize == ECustomThumbnailSize || |
440 iThumbnailSize == ECustomThumbnailSize || |
468 iThumbnailSize == EUnknownThumbnailSize ) |
441 iThumbnailSize == EUnknownThumbnailSize ) |
469 { |
442 { |
470 complTask->SetDoStore( EFalse ); |
443 complTask->SetDoStore( EFalse ); |
471 TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() - do not store", this ); |
444 TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() - do not store", this ); |
472 OstTrace1( TRACE_NORMAL, DUP7_CTHUMBNAILGENERATETASK_CREATESCALETASKSL, "CThumbnailGenerateTask::CreateScaleTasksL - do not store;this=%o", this ); |
|
473 } |
445 } |
474 else |
446 else |
475 { |
447 { |
476 complTask->SetDoStore( ETrue ); |
448 complTask->SetDoStore( ETrue ); |
477 } |
449 } |
505 // --------------------------------------------------------------------------- |
477 // --------------------------------------------------------------------------- |
506 // |
478 // |
507 void CThumbnailGenerateTask::CreateBlackListedL( const TSize& aOriginalSize ) |
479 void CThumbnailGenerateTask::CreateBlackListedL( const TSize& aOriginalSize ) |
508 { |
480 { |
509 TN_DEBUG1( "CThumbnailGenerateTask::CreateBlackListedL()"); |
481 TN_DEBUG1( "CThumbnailGenerateTask::CreateBlackListedL()"); |
510 OstTrace0( TRACE_NORMAL, CTHUMBNAILGENERATETASK_CREATEBLACKLISTEDL, "CThumbnailGenerateTask::CreateBlackListedL" ); |
|
511 CFbsBitmap* tempBitmap = 0; |
482 CFbsBitmap* tempBitmap = 0; |
512 tempBitmap = new (ELeave) CFbsBitmap(); |
483 tempBitmap = new (ELeave) CFbsBitmap(); |
513 CleanupStack::PushL( tempBitmap ); |
484 CleanupStack::PushL( tempBitmap ); |
514 TSize tempSize( 1, 1 ); |
485 TSize tempSize( 1, 1 ); |
515 User::LeaveIfError( tempBitmap->Create( tempSize, iDisplayMode ) ); |
486 User::LeaveIfError( tempBitmap->Create( tempSize, iDisplayMode ) ); |
542 // --------------------------------------------------------------------------- |
513 // --------------------------------------------------------------------------- |
543 // |
514 // |
544 void CThumbnailGenerateTask::DoBlacklisting( const TInt aError, const TSize& aOriginalSize ) |
515 void CThumbnailGenerateTask::DoBlacklisting( const TInt aError, const TSize& aOriginalSize ) |
545 { |
516 { |
546 TN_DEBUG1( "CThumbnailGenerateTask::DoBlacklisting()"); |
517 TN_DEBUG1( "CThumbnailGenerateTask::DoBlacklisting()"); |
547 OstTrace0( TRACE_NORMAL, CTHUMBNAILGENERATETASK_DOBLACKLISTING, "CThumbnailGenerateTask::DoBlacklisting" ); |
|
548 // Create a temporary bitmap of size 1 for storing blacklisted thumbnail |
518 // Create a temporary bitmap of size 1 for storing blacklisted thumbnail |
549 // Because no actual bitmap data is generated, there is no reason to |
519 // Because no actual bitmap data is generated, there is no reason to |
550 // add bitmap to server bitmap pool. Completion of client request with |
520 // add bitmap to server bitmap pool. Completion of client request with |
551 // error code just results in applications showing their default bitmap. |
521 // error code just results in applications showing their default bitmap. |
552 if( aError != KErrNone && (iFilename != KNullDesC || iTargetUri != KNullDesC )) |
522 if( aError != KErrNone && (iFilename != KNullDesC || iTargetUri != KNullDesC )) |
561 { |
531 { |
562 |
532 |
563 if(iMissingSizes) |
533 if(iMissingSizes) |
564 { |
534 { |
565 TN_DEBUG2( "CThumbnailGenerateTask::DoBlacklisting() - blacklist missing sizes count = %d", iMissingSizes->Count() ); |
535 TN_DEBUG2( "CThumbnailGenerateTask::DoBlacklisting() - blacklist missing sizes count = %d", iMissingSizes->Count() ); |
566 OstTrace1( TRACE_NORMAL, DUP1_CTHUMBNAILGENERATETASK_DOBLACKLISTING, "CThumbnailGenerateTask::DoBlacklisting - blacklist missing sizes count;iMissingSizes->Count()=%d", iMissingSizes->Count() ); |
|
567 |
536 |
568 for ( TInt i( 0 ); i < iMissingSizes->Count(); i++ ) |
537 for ( TInt i( 0 ); i < iMissingSizes->Count(); i++ ) |
569 { |
538 { |
570 iThumbnailSize = (*iMissingSizes)[ i ].iType; |
539 iThumbnailSize = (*iMissingSizes)[ i ].iType; |
571 TRAPD( err, CreateBlackListedL( aOriginalSize ) ); |
540 TRAPD( err, CreateBlackListedL( aOriginalSize ) ); |
572 if (err != KErrNone) |
541 if (err != KErrNone) |
573 { |
542 { |
574 TN_DEBUG3( "CThumbnailGenerateTask::DoBlacklisting() - blacklisting missing size %d failed with code %d", iThumbnailSize, err ); |
543 TN_DEBUG3( "CThumbnailGenerateTask::DoBlacklisting() - blacklisting missing size %d failed with code %d", iThumbnailSize, err ); |
575 OstTraceExt2( TRACE_NORMAL, DUP2_CTHUMBNAILGENERATETASK_DOBLACKLISTING, "CThumbnailGenerateTask::DoBlacklisting - - blacklisting missing size failed with error;iThumbnailSize=%u;err=%d", iThumbnailSize, err ); |
|
576 } |
544 } |
577 } |
545 } |
578 return; |
546 return; |
579 } |
547 } |
580 else |
548 else |
581 { |
549 { |
582 TN_DEBUG1( "CThumbnailGenerateTask::DoBlacklisting() - blacklist single size" ); |
550 TN_DEBUG1( "CThumbnailGenerateTask::DoBlacklisting() - blacklist single size" ); |
583 OstTrace0( TRACE_NORMAL, DUP3_CTHUMBNAILGENERATETASK_DOBLACKLISTING, "CThumbnailGenerateTask::DoBlacklisting - blacklist single size" ); |
|
584 TRAPD( err, CreateBlackListedL( aOriginalSize ) ); |
551 TRAPD( err, CreateBlackListedL( aOriginalSize ) ); |
585 if (err != KErrNone) |
552 if (err != KErrNone) |
586 { |
553 { |
587 TN_DEBUG2( "CThumbnailGenerateTask::DoBlacklisting() - blacklisting failed with code %d", err ); |
554 TN_DEBUG2( "CThumbnailGenerateTask::DoBlacklisting() - blacklisting failed with code %d", err ); |
588 OstTrace1( TRACE_NORMAL, DUP4_CTHUMBNAILGENERATETASK_DOBLACKLISTING, "CThumbnailGenerateTask::DoBlacklisting - blacklisting failed with code;err=%d", err ); |
|
589 } |
555 } |
590 return; |
556 return; |
591 } |
557 } |
592 } |
558 } |
593 TN_DEBUG1( "CThumbnailGenerateTask::DoBlacklisting() - not blacklisted " ); |
559 TN_DEBUG1( "CThumbnailGenerateTask::DoBlacklisting() - not blacklisted " ); |
594 OstTrace0( TRACE_NORMAL, DUP5_CTHUMBNAILGENERATETASK_DOBLACKLISTING, "CThumbnailGenerateTask::DoBlacklisting - not blacklisted" ); |
|
595 } |
560 } |
596 } |
561 } |
597 |
562 |
598 |
563 |