imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailgeneratetask.cpp
branchRCL_3
changeset 58 9e8b0cc88842
parent 50 60bb012f1157
equal deleted inserted replaced
50:60bb012f1157 58:9e8b0cc88842
    41     aProcessor, CThumbnailServer& aServer, RFile64* aFile, TDesC8* aBuffer,
    41     aProcessor, CThumbnailServer& aServer, RFile64* aFile, TDesC8* aBuffer,
    42     const TDataType* aMimeType, CThumbnailManager::TThumbnailFlags aFlags,
    42     const TDataType* aMimeType, CThumbnailManager::TThumbnailFlags aFlags,
    43     const TSize& aSize, TDisplayMode aDisplayMode, TInt aPriority,
    43     const TSize& aSize, TDisplayMode aDisplayMode, TInt aPriority,
    44     RArray < TThumbnailPersistentSize >* aMissingSizes, const TDesC& aTargetUri,
    44     RArray < TThumbnailPersistentSize >* aMissingSizes, const TDesC& aTargetUri,
    45     TThumbnailSize aThumbnailSize, const TInt64 aModified, 
    45     TThumbnailSize aThumbnailSize, const TInt64 aModified, 
    46     const CThumbnailManager::TThumbnailQualityPreference aQualityPreference,
    46     const CThumbnailManager::TThumbnailQualityPreference aQualityPreference ): 
    47     TBool aVirtualUri ): 
       
    48     CThumbnailTask( aProcessor, aPriority ), iServer( aServer ), 
    47     CThumbnailTask( aProcessor, aPriority ), iServer( aServer ), 
    49     iFlags( aFlags ), iSize( aSize ), iDisplayMode( aDisplayMode ),
    48     iFlags( aFlags ), iSize( aSize ), iDisplayMode( aDisplayMode ),
    50     iMissingSizes( aMissingSizes ), iTargetUri( aTargetUri ),
    49     iMissingSizes( aMissingSizes ), iTargetUri( aTargetUri ),
    51     iThumbnailSize( aThumbnailSize ), iModified(aModified),
    50     iThumbnailSize( aThumbnailSize ), iModified(aModified),
    52     iQualityPreference( aQualityPreference ), iVirtualUri( aVirtualUri )
    51     iQualityPreference( aQualityPreference )
    53     {
    52     {
    54     TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CThumbnailGenerateTask()", this);
    53     TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CThumbnailGenerateTask()", this);
    55     
    54     
    56     if ( !aBuffer && aFile)
    55     if ( !aBuffer && aFile)
    57         {
    56         {
    93 	
    92 	
    94     if ( iMissingSizes )
    93     if ( iMissingSizes )
    95         {
    94         {
    96         iMissingSizes->Reset();
    95         iMissingSizes->Reset();
    97         delete iMissingSizes;
    96         delete iMissingSizes;
    98         iMissingSizes = NULL;
       
    99         }
    97         }
   100 		
    98 		
   101     if ( iBitmapHandle )
    99     if ( iBitmapHandle )
   102         {
   100         {
   103         iServer.DeleteBitmapFromPool( iBitmapHandle );
   101         iServer.DeleteBitmapFromPool( iBitmapHandle );
   125     
   123     
   126 #ifdef _DEBUG
   124 #ifdef _DEBUG
   127     aStart.UniversalTime();
   125     aStart.UniversalTime();
   128 #endif
   126 #endif
   129    
   127    
   130     TBuf8< KMaxDataTypeLength > mimeType;
   128     TParsePtrC parse(iFilename);
   131 
   129     TPtrC ext(parse.Ext());
   132     if ( (!iVirtualUri && iFilename.Right(KExtLength).CompareF(KNonEmbeddedArtExt) == 0) ||
   130     TBuf8< KMaxDataTypeLength > mimeType;                
   133          (iVirtualUri && iTargetUri.Right(KExtLength).CompareF(KContactExt) == 0) ) // tparse panics with virtual URI
   131     if  (ext.CompareF(KNonEmbeddedArtExt)== 0) 
   134         {         
   132         {       
   135         mimeType.Copy( KImageMime );  		
   133         mimeType.Copy( KImageMime );  		
   136         }
   134         }
   137     else
   135     else
   138         {
   136         {
   139         mimeType = iMimeType.Des8();
   137         mimeType = iMimeType.Des8();
   140         }
   138         }
   141     iProvider = iServer.ResolveProviderL(mimeType);
   139     iProvider = iServer.ResolveProviderL(mimeType);
   142        	
   140        	
   143     TN_DEBUG3( "CThumbnailGenerateTask(0x%08x) -- provider UID 0x%08x", this, iProvider->Uid());
   141     TN_DEBUG3( "CThumbnailGenerateTask(0x%08x) -- provider UID 0x%08x", this,
       
   142         iProvider->Uid());
   144 
   143 
   145     __ASSERT_DEBUG(( iProvider ), ThumbnailPanic( EThumbnailNullPointer ));
   144     __ASSERT_DEBUG(( iProvider ), ThumbnailPanic( EThumbnailNullPointer ));
   146 
   145 
   147     iProvider->CancelGetThumbnail();
   146     iProvider->CancelGetThumbnail();
   148     iProvider->Reset();
   147     iProvider->Reset();
   196 // ---------------------------------------------------------------------------
   195 // ---------------------------------------------------------------------------
   197 //
   196 //
   198 void CThumbnailGenerateTask::DoCancel()
   197 void CThumbnailGenerateTask::DoCancel()
   199     {
   198     {
   200     TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::DoCancel()", this );
   199     TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::DoCancel()", this );
   201     
       
   202     if ( iProvider )
   200     if ( iProvider )
   203         {
   201         {
   204         iProvider->CancelGetThumbnail();
   202         iProvider->CancelGetThumbnail();
   205         }
   203         }
   206     }
   204     }
   328     CleanupStack::Pop( aBitmap );
   326     CleanupStack::Pop( aBitmap );
   329 
   327 
   330     // compTask is the scale task which returns the bitmap to the client
   328     // compTask is the scale task which returns the bitmap to the client
   331     CThumbnailScaleTask* complTask = NULL;
   329     CThumbnailScaleTask* complTask = NULL;
   332 	
   330 	
   333     TInt err1 = KErrNone;
       
   334     TInt err2 = KErrNone;
       
   335     TBool isPublic = ETrue;
       
   336     TBool isPublic2 = ETrue;
       
   337     
       
   338     if(iFilename != KNullDesC)
       
   339         {
       
   340         TRAP(err1, iServer.StoreForPathL(iFilename));
       
   341         
       
   342         isPublic = iServer.IsPublicPath( iFilename );
       
   343         }           
       
   344     if(iTargetUri != KNullDesC )
       
   345         {
       
   346         TRAP(err2, iServer.StoreForPathL(iTargetUri));
       
   347         
       
   348         isPublic2 = iServer.IsPublicPath( iTargetUri );
       
   349         }
       
   350     
       
   351     // check if need to create more than one scale task
       
   352     if ( iMissingSizes )
   331     if ( iMissingSizes )
   353         {
   332         {
   354         const TInt count = iMissingSizes->Count();
   333         const TInt count = iMissingSizes->Count();
   355         
   334         
   356         // scale small thumbs first, because fullscreen encoding takes longer
   335         for ( TInt i( 0 ); i < count; i++ )
   357         for ( TInt i( count-1 ); i >= 0; i-- )
       
   358             {
   336             {
   359             TThumbnailSize size = (*iMissingSizes)[ i ].iType;
   337             TThumbnailSize size = (*iMissingSizes)[ i ].iType;
   360 #ifdef _DEBUG
   338 #ifdef _DEBUG
   361             TN_DEBUG3( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() *iMissingSizes)[ i ].iType == %d", this, size );
   339             TN_DEBUG3( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() *iMissingSizes)[ i ].iType == %d", this, size );
   362 #endif
   340 #endif
   364             if ( iPortrait )
   342             if ( iPortrait )
   365                 {
   343                 {
   366                 if ( size == EFullScreenThumbnailSize ||
   344                 if ( size == EFullScreenThumbnailSize ||
   367                      size == EVideoFullScreenThumbnailSize ||
   345                      size == EVideoFullScreenThumbnailSize ||
   368                      size == EAudioFullScreenThumbnailSize ||
   346                      size == EAudioFullScreenThumbnailSize ||
   369                      size == EImageFullScreenThumbnailSize || 
   347                      size == EImageFullScreenThumbnailSize )
   370                      size == EContactFullScreenThumbnailSize )
       
   371                     {
   348                     {
   372                     TN_DEBUG2( "*iMissingSizes)[ i ].iWidth == %d", (*iMissingSizes)[ i ].iSize.iWidth );
   349                     TN_DEBUG2( "*iMissingSizes)[ i ].iWidth == %d", (*iMissingSizes)[ i ].iSize.iWidth );
   373                     TN_DEBUG2( "*iMissingSizes)[ i ].iHeight == %d", (*iMissingSizes)[ i ].iSize.iHeight );
   350                     TN_DEBUG2( "*iMissingSizes)[ i ].iHeight == %d", (*iMissingSizes)[ i ].iSize.iHeight );
   374                     TInt width = (*iMissingSizes)[ i ].iSize.iWidth; 
   351                     TInt width = (*iMissingSizes)[ i ].iSize.iWidth; 
   375                     (*iMissingSizes)[ i ].iSize.iWidth = (*iMissingSizes)[ i ].iSize.iHeight;
   352                     (*iMissingSizes)[ i ].iSize.iWidth = (*iMissingSizes)[ i ].iSize.iHeight;
   380                 }
   357                 }
   381             
   358             
   382             CThumbnailScaleTask* complTask = CThumbnailScaleTask::NewL( iProcessor, iServer, iFilename,
   359             CThumbnailScaleTask* complTask = CThumbnailScaleTask::NewL( iProcessor, iServer, iFilename,
   383                 aBitmap, iOriginalSize, (*iMissingSizes)[ i ].iSize, (*iMissingSizes)[ i ].iCrop, iDisplayMode,
   360                 aBitmap, iOriginalSize, (*iMissingSizes)[ i ].iSize, (*iMissingSizes)[ i ].iCrop, iDisplayMode,
   384                 KMaxPriority, iTargetUri, (*iMissingSizes)[ i ].iType, iModified, iScaledBitmapToPool, iEXIF,
   361                 KMaxPriority, iTargetUri, (*iMissingSizes)[ i ].iType, iModified, iScaledBitmapToPool, iEXIF,
   385                 iRequestId, iVirtualUri);
   362                 iRequestId);
   386             CleanupStack::PushL( complTask );
   363             CleanupStack::PushL( complTask );
   387             
   364             
       
   365             TInt err1 = KErrNone;
       
   366             TInt err2 = KErrNone;
       
   367             
       
   368             if(iFilename != KNullDesC)
       
   369                 {
       
   370                 TRAP(err1, iServer.StoreForPathL(iFilename));
       
   371                 }
       
   372             
       
   373             if(iTargetUri != KNullDesC )
       
   374                 {
       
   375                 TRAP(err2, iServer.StoreForPathL(iTargetUri));
       
   376                 }
   388             // if trying to access Z drive, don't try to store
   377             // if trying to access Z drive, don't try to store
   389             // don't want to store custom sizes
   378             // don't want to store custom sizes
   390             // don't store if from private directory
   379             if( err1 == KErrAccessDenied || err2 == KErrAccessDenied ||
   391             if( !isPublic || !isPublic2 ||
   380                     (*iMissingSizes)[ i ].iType == ECustomThumbnailSize || 
   392                 err1 == KErrAccessDenied || err2 == KErrAccessDenied ||
   381                     (*iMissingSizes)[ i ].iType == EUnknownThumbnailSize )
   393                 (*iMissingSizes)[ i ].iType == ECustomThumbnailSize || 
       
   394                 (*iMissingSizes)[ i ].iType == EUnknownThumbnailSize )
       
   395                 {
   382                 {
   396                 complTask->SetDoStore( EFalse );
   383                 complTask->SetDoStore( EFalse );
   397                 TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() - do not store", this );
   384                 TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() - do not store", this );
   398                 }
   385                 }
   399             else
   386             else
   400                 {
   387                 {
   401                 complTask->SetDoStore( ETrue );
   388                 if(iFilename != KNullDesC)
       
   389                     {
       
   390                     complTask->SetDoStore(iServer.IsPublicPath( iFilename ));
       
   391                     }
       
   392                 
       
   393                 if(iTargetUri != KNullDesC)
       
   394                     {
       
   395                     complTask->SetDoStore(iServer.IsPublicPath( iTargetUri ));
       
   396                     }
   402                 }
   397                 }
   403             
   398             
   404             iProcessor.AddTaskL( complTask );
   399             iProcessor.AddTaskL( complTask );
   405             CleanupStack::Pop( complTask );
   400             CleanupStack::Pop( complTask );
   406             
   401             
   418         if( iPortrait )
   413         if( iPortrait )
   419             {
   414             {
   420             if ( iThumbnailSize == EFullScreenThumbnailSize ||
   415             if ( iThumbnailSize == EFullScreenThumbnailSize ||
   421                  iThumbnailSize == EVideoFullScreenThumbnailSize ||
   416                  iThumbnailSize == EVideoFullScreenThumbnailSize ||
   422                  iThumbnailSize == EAudioFullScreenThumbnailSize ||
   417                  iThumbnailSize == EAudioFullScreenThumbnailSize ||
   423                  iThumbnailSize == EImageFullScreenThumbnailSize ||
   418                  iThumbnailSize == EImageFullScreenThumbnailSize )
   424                  iThumbnailSize == EContactFullScreenThumbnailSize)
       
   425                 {
   419                 {
   426                 TInt width = iSize.iWidth; 
   420                 TInt width = iSize.iWidth; 
   427                 iSize.iWidth = iSize.iHeight;
   421                 iSize.iWidth = iSize.iHeight;
   428                 iSize.iHeight = width;
   422                 iSize.iHeight = width;
   429                 }
   423                 }
   430             }
   424             }
   431         
   425         
   432         complTask = CThumbnailScaleTask::NewL( iProcessor, iServer, iFilename,
   426         complTask = CThumbnailScaleTask::NewL( iProcessor, iServer, iFilename,
   433             aBitmap, iOriginalSize, iSize, iFlags& CThumbnailManager
   427             aBitmap, iOriginalSize, iSize, iFlags& CThumbnailManager
   434             ::ECropToAspectRatio, iDisplayMode, KMaxPriority, iTargetUri,
   428             ::ECropToAspectRatio, iDisplayMode, KMaxPriority, iTargetUri,
   435             iThumbnailSize, iModified, iScaledBitmapToPool, iEXIF, iRequestId,
   429             iThumbnailSize, iModified, iScaledBitmapToPool, iEXIF, iRequestId );
   436             iVirtualUri);
       
   437         CleanupStack::PushL( complTask );
   430         CleanupStack::PushL( complTask );
   438         
   431         
       
   432         TInt err1 = KErrNone;
       
   433         TInt err2 = KErrNone;
       
   434         if(iFilename != KNullDesC)
       
   435             {
       
   436             TRAP(err1, iServer.StoreForPathL(iFilename));
       
   437             }
       
   438         if(iTargetUri != KNullDesC)
       
   439             {
       
   440             TRAP(err2, iServer.StoreForPathL(iTargetUri));
       
   441             }
   439         // if trying to access Z drive, don't try to store
   442         // if trying to access Z drive, don't try to store
   440         // don't want to store custom sizes
   443         // don't want to store custom sizes
   441         if( !isPublic || !isPublic2 ||
   444         if( err1 == KErrAccessDenied || err2 == KErrAccessDenied ||
   442             err1 == KErrAccessDenied || err2 == KErrAccessDenied ||
       
   443             iThumbnailSize == ECustomThumbnailSize || 
   445             iThumbnailSize == ECustomThumbnailSize || 
   444             iThumbnailSize == EUnknownThumbnailSize )
   446             iThumbnailSize == EUnknownThumbnailSize )
   445             {
   447             {
   446             complTask->SetDoStore( EFalse );
   448             complTask->SetDoStore( EFalse );
   447             TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() - do not store", this );
   449             TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() - do not store", this );
   448             }
   450             }
   449         else
   451         else
   450             {
   452             {
   451             complTask->SetDoStore( ETrue );
   453             if(iFilename != KNullDesC)
       
   454                 {
       
   455                 complTask->SetDoStore(iServer.IsPublicPath( iFilename ));
       
   456                 }
       
   457              
       
   458              if(iTargetUri != KNullDesC)
       
   459                 {
       
   460                 complTask->SetDoStore(iServer.IsPublicPath( iTargetUri ));
       
   461                 }
   452             }
   462             }
   453         
   463         
   454         iProcessor.AddTaskL( complTask );
   464         iProcessor.AddTaskL( complTask );
   455         CleanupStack::Pop( complTask );
   465         CleanupStack::Pop( complTask );
   456         
   466         
   494     // of requested size only meaningful. 
   504     // of requested size only meaningful. 
   495     
   505     
   496     if(iFilename != KNullDesC)
   506     if(iFilename != KNullDesC)
   497         {
   507         {
   498         iServer.StoreForPathL( iFilename )->StoreThumbnailL( 
   508         iServer.StoreForPathL( iFilename )->StoreThumbnailL( 
   499             iFilename, tempBitmap, aOriginalSize, EFalse, iThumbnailSize, iModified, !iVirtualUri, ETrue );
   509             iFilename, tempBitmap, aOriginalSize, EFalse, iThumbnailSize, iModified, EFalse, ETrue );
   500 		//remove result from fetched checker
   510 		//remove result from fetched checker
   501         iServer.FetchedChecker().SetFetchResult( iFilename,  iThumbnailSize, KErrNone );
   511         iServer.FetchedChecker().SetFetchResult( iFilename, KErrNone );
   502         }
   512         }
   503     else if(iTargetUri != KNullDesC)
   513     else if(iTargetUri != KNullDesC)
   504         {
   514         {
   505         iServer.StoreForPathL( iTargetUri )->StoreThumbnailL( 
   515         iServer.StoreForPathL( iTargetUri )->StoreThumbnailL( 
   506             iTargetUri, tempBitmap, aOriginalSize, EFalse, iThumbnailSize, iModified, !iVirtualUri, ETrue );
   516             iTargetUri, tempBitmap, aOriginalSize, EFalse, iThumbnailSize, iModified, EFalse, ETrue );
   507 		//remove result from fetched checker
   517 		//remove result from fetched checker
   508         iServer.FetchedChecker().SetFetchResult( iTargetUri, iThumbnailSize, KErrNone );
   518         iServer.FetchedChecker().SetFetchResult( iTargetUri, KErrNone );
   509         }
   519         }
   510 
   520 
   511     CleanupStack::PopAndDestroy( tempBitmap );
   521     CleanupStack::PopAndDestroy( tempBitmap );
   512     }
   522     }
   513 
   523