mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp
changeset 25 d881023c13eb
parent 0 a2952bb97e68
child 27 cbb1bfb7ebfb
equal deleted inserted replaced
21:a05c44bc3c61 25:d881023c13eb
    10 * Nokia Corporation - initial contribution.
    10 * Nokia Corporation - initial contribution.
    11 *
    11 *
    12 * Contributors:
    12 * Contributors:
    13 *
    13 *
    14 * Description:  Extracts metadata from a file
    14 * Description:  Extracts metadata from a file
    15 *  Version     : %version: da1mmcf#38.1.4.2.6.1.5 % << Don't touch! Updated by Synergy at check-out.
    15 *  Version     : %version: da1mmcf#38.1.4.2.6.1.5.3.1 % << Don't touch! Updated by Synergy at check-out.
    16 *
    16 *
    17 */
    17 */
    18 
    18 
    19 
    19 
    20 #include <e32base.h>
    20 #include <e32base.h>
    49 _LIT( KImageFileType, "image/jpeg" );
    49 _LIT( KImageFileType, "image/jpeg" );
    50 const TInt KMPXTimeoutTimer = 3000000; // 3 seconds
    50 const TInt KMPXTimeoutTimer = 3000000; // 3 seconds
    51 const TInt KMPXMaxThumbnailRequest = 5; 
    51 const TInt KMPXMaxThumbnailRequest = 5; 
    52 #endif //RD_MPX_TNM_INTEGRATION
    52 #endif //RD_MPX_TNM_INTEGRATION
    53 
    53 
       
    54 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
       
    55 _LIT( KNonEmbeddedArtExt, ".alb" );
       
    56 #endif
    54 //Helper functions
    57 //Helper functions
    55 static void FindAndReplaceForbiddenChars(TDes& aString, TInt aLen)
    58 static void FindAndReplaceForbiddenChars(TDes& aString, TInt aLen)
    56     {
    59     {
    57     MPX_ASSERT(aLen == aString.Length());
    60     MPX_ASSERT(aLen == aString.Length());
    58 
    61 
   335     for( TInt i=0; i<count; ++i )
   338     for( TInt i=0; i<count; ++i )
   336         {
   339         {
   337         TMetaDataFieldId fieldType;
   340         TMetaDataFieldId fieldType;
   338 
   341 
   339         HBufC* value = NULL;
   342         HBufC* value = NULL;
   340         TRAPD( err, value = metaCont.At( i, fieldType ).AllocL() );
   343         metaCont.FieldIdAt( i, fieldType );  // get the field type
   341         CleanupStack::PushL(value);
   344         
   342         if ( KErrNone != err )
   345         // get the value, except for album art
   343         {
   346         if ( fieldType != EMetaDataJpeg )
   344             CleanupStack::PopAndDestroy(value);
   347            {
   345             continue;
   348            TRAPD( err, value = metaCont.At( i, fieldType ).AllocL() );
   346         }
   349            CleanupStack::PushL( value );
   347 
   350            if ( KErrNone != err )
       
   351                {
       
   352                MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error = %i", err);           
       
   353                CleanupStack::PopAndDestroy( value );
       
   354                continue;
       
   355                }     
       
   356            }
       
   357         
   348         switch( fieldType )
   358         switch( fieldType )
   349             {
   359             {
   350             case EMetaDataSongTitle:
   360             case EMetaDataSongTitle:
   351                 {
   361                 {
   352                 TPtr valptr = value->Des();
   362                 TPtr valptr = value->Des();
   443                 }
   453                 }
   444             case EMetaDataJpeg:
   454             case EMetaDataJpeg:
   445                 {
   455                 {
   446 #ifdef RD_MPX_TNM_INTEGRATION
   456 #ifdef RD_MPX_TNM_INTEGRATION
   447                 MPX_PERF_START(CMPXMetadataExtractor_SetMediaPropertiesL_JPEG_TNM);
   457                 MPX_PERF_START(CMPXMetadataExtractor_SetMediaPropertiesL_JPEG_TNM);
   448                 HBufC8* value8 = MPXUser::Alloc8L(metaCont.At( i, fieldType ));
   458                 TPtrC8 ptr8 = metaCont.Field8( EMetaDataJpeg );
       
   459                 HBufC8* value8; 
       
   460                 TRAPD( err, value8 = ptr8.AllocL() );
       
   461                 if ( KErrNone != err )
       
   462                     {
       
   463                     MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error jpeg = %i", err);           
       
   464                     User::Leave( err );  
       
   465                     }                 
   449                 CleanupStack::PushL( value8 );
   466                 CleanupStack::PushL( value8 );
   450                 AddMediaAlbumArtL( aMedia, aFile, *value8 );
   467                 AddMediaAlbumArtL( aMedia, aFile, *value8 );
   451                 CleanupStack::Pop(value8);
   468                 CleanupStack::Pop(value8);
   452                 MPX_PERF_END(CMPXMetadataExtractor_SetMediaPropertiesL_JPEG_TNM);
   469                 MPX_PERF_END(CMPXMetadataExtractor_SetMediaPropertiesL_JPEG_TNM);
   453 #else //RD_MPX_TNM_INTEGRATION
   470 #else //RD_MPX_TNM_INTEGRATION
   476                 {
   493                 {
   477                 //ASSERT(0);
   494                 //ASSERT(0);
   478                 break;
   495                 break;
   479                 }
   496                 }
   480             }
   497             }
   481         CleanupStack::PopAndDestroy(value);
   498         if (fieldType != EMetaDataJpeg)
       
   499             {
       
   500             CleanupStack::PopAndDestroy( value );       
       
   501             }
   482         }
   502         }
   483 
   503 
   484     MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL --->" );
   504     MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL --->" );
   485     }
   505     }
   486 
   506 
   715         }
   735         }
   716     
   736     
   717     // Get full file name.
   737     // Get full file name.
   718     const TDesC& path = aMedia->ValueText(KMPXMediaGeneralUri);
   738     const TDesC& path = aMedia->ValueText(KMPXMediaGeneralUri);
   719     MPX_DEBUG2("CMPXMetadataExtractor::ExtractAlbumArtL Filename:%S ", &path );
   739     MPX_DEBUG2("CMPXMetadataExtractor::ExtractAlbumArtL Filename:%S ", &path );
   720     
   740 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
       
   741     TParsePtrC parse( path );
       
   742     TPtrC ext( parse.Ext() );
       
   743     if (ext.CompareF(KNonEmbeddedArtExt)== 0)
       
   744         {
       
   745 		#ifdef RD_MPX_TNM_INTEGRATION
       
   746 
       
   747         //check if can send TN request, If thumbnail creation is ongoing, wait til it is done
       
   748         CheckBeforeSendRequest();
       
   749 
       
   750         CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC(
       
   751            path, KImageFileType  );
       
   752           
       
   753        
       
   754 
       
   755         iTNManager->CreateThumbnails( *source );
       
   756         
       
   757         iOutstandingThumbnailRequest++;
       
   758         CleanupStack::PopAndDestroy( source );
       
   759 
       
   760         #endif
       
   761         }
       
   762     else
       
   763         {
       
   764 #endif
   721     // create wanted fields array
   765     // create wanted fields array
   722     RArray<TMetaDataFieldId> wantedFields;
   766     RArray<TMetaDataFieldId> wantedFields;
   723     CleanupClosePushL( wantedFields );
   767     CleanupClosePushL( wantedFields );
   724     wantedFields.Append(EMetaDataJpeg);
   768     wantedFields.Append(EMetaDataJpeg);
   725     
   769     
   744         TRAP( err, GetMediaAlbumArtL( *aMedia, path ));
   788         TRAP( err, GetMediaAlbumArtL( *aMedia, path ));
   745         }
   789         }
   746 
   790 
   747     // Reset the utility
   791     // Reset the utility
   748     iMetadataUtility->ResetL();
   792     iMetadataUtility->ResetL();
   749     
   793 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
       
   794       }
       
   795 #endif
   750     return err;
   796     return err;
   751     }
   797     }
   752 
   798 
   753 // ----------------------------------------------------------------------------
   799 // ----------------------------------------------------------------------------
   754 // Set album art.
   800 // Set album art.
   759     MPX_FUNC("CMPXMetadataExtractor::GetMediaAlbumArtL()");
   805     MPX_FUNC("CMPXMetadataExtractor::GetMediaAlbumArtL()");
   760     TInt err = KErrNone;
   806     TInt err = KErrNone;
   761     // get metadata container.
   807     // get metadata container.
   762     const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL();
   808     const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL();
   763 
   809 
   764     TPtrC data = metaCont.Field( EMetaDataJpeg );
   810     TPtrC8 data8 = metaCont.Field8( EMetaDataJpeg );
   765     
   811     
   766     if ( data.Length() )
   812     if ( data8.Length() )
   767         {
   813         {
   768         MPX_DEBUG1("CMPXMetadataExtractor::GetMediaAlbumArtL(): Album art exist.");
   814         MPX_DEBUG1("CMPXMetadataExtractor::GetMediaAlbumArtL(): Album art exist.");
       
   815 
   769 #ifdef RD_MPX_TNM_INTEGRATION
   816 #ifdef RD_MPX_TNM_INTEGRATION
   770         HBufC8* value8 = MPXUser::Alloc8L( data );       
   817         HBufC8* value8; 
       
   818         TRAPD( err, value8 = data8.AllocL() );
       
   819         if ( KErrNone != err )
       
   820             {
       
   821             MPX_DEBUG2("CMPXMetadataExtractor::GetMediaAlbumArtL - error jpeg = %i", err);           
       
   822             User::Leave( err );  
       
   823             }              
   771         CleanupStack::PushL( value8 );
   824         CleanupStack::PushL( value8 );
   772         AddMediaAlbumArtL( aMedia, aFile, *value8 );
   825         AddMediaAlbumArtL( aMedia, aFile, *value8 );
   773         CleanupStack::Pop(value8);
   826         CleanupStack::Pop(value8);
   774 #else // RD_MPX_TNM_INTEGRATION
   827 #else // RD_MPX_TNM_INTEGRATION
   775         aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName, aFile );
   828         aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName, aFile );
   791                                                TDesC8& aValue )
   844                                                TDesC8& aValue )
   792     {
   845     {
   793     MPX_FUNC("CMPXMetadataExtractor::AddMediaAlbumArtL()");
   846     MPX_FUNC("CMPXMetadataExtractor::AddMediaAlbumArtL()");
   794 #ifdef RD_MPX_TNM_INTEGRATION
   847 #ifdef RD_MPX_TNM_INTEGRATION
   795     
   848     
   796     // If thumbnail creation is ongoing, wait til it is done
   849     //check if can send TN request, If thumbnail creation is ongoing, wait til it is done
   797     if ( iOutstandingThumbnailRequest > KMPXMaxThumbnailRequest )
   850     CheckBeforeSendRequest();
   798         {
   851 
   799         MPX_DEBUG1("CMPXMetadataExtractor::AddMediaAlbumArtL(): Thumbnail creation ongoing!");
       
   800         iTNMBlockCount++;
       
   801         // Cancel timer.
       
   802         CancelTimeoutTimer();
       
   803         // Start timer in case there is no callback from ThumbNail Manager. 
       
   804         iTimer->Start(
       
   805             KMPXTimeoutTimer,
       
   806             KMPXTimeoutTimer,
       
   807             TCallBack(TimeoutTimerCallback, this ));
       
   808         
       
   809         // Start wait loop until we get a callback from ThumbNail Manager.
       
   810         if ( !iTNSyncWait->IsStarted() )
       
   811             {
       
   812             iTNSyncWait->Start();
       
   813             }
       
   814         }
       
   815     
       
   816     aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName, aFile );
   852     aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName, aFile );
   817     
   853     
   818     TBuf<256> mimeType;
   854     TBuf<256> mimeType;
   819     mimeType.Copy( KImageFileType );
   855     mimeType.Copy( KImageFileType );
   820     CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC(
   856     CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC(
   824     aMedia.SetTextValueL( KMPXMediaMusicOriginalAlbumArtFileName, aFile );
   860     aMedia.SetTextValueL( KMPXMediaMusicOriginalAlbumArtFileName, aFile );
   825     iOutstandingThumbnailRequest++;
   861     iOutstandingThumbnailRequest++;
   826     
   862     
   827 #endif // RD_MPX_TNM_INTEGRATION          
   863 #endif // RD_MPX_TNM_INTEGRATION          
   828     }
   864     }
       
   865 
       
   866 void CMPXMetadataExtractor::CheckBeforeSendRequest()
       
   867      {
       
   868      MPX_FUNC("CMPXMetadataExtractor::CheckBeforeSendRequest()");
       
   869 #ifdef RD_MPX_TNM_INTEGRATION
       
   870 	// If thumbnail creation is ongoing, wait til it is done
       
   871     if ( iOutstandingThumbnailRequest > KMPXMaxThumbnailRequest )
       
   872         {
       
   873         MPX_DEBUG1("CMPXMetadataExtractor::CheckBeforeSendRequest(): Thumbnail creation ongoing!");
       
   874         iTNMBlockCount++;
       
   875         // Cancel timer.
       
   876         CancelTimeoutTimer();
       
   877         // Start timer in case there is no callback from ThumbNail Manager.
       
   878         iTimer->Start(
       
   879             KMPXTimeoutTimer,
       
   880             KMPXTimeoutTimer,
       
   881             TCallBack(TimeoutTimerCallback, this ));
       
   882 
       
   883         // Start wait loop until we get a callback from ThumbNail Manager.
       
   884         if ( !iTNSyncWait->IsStarted() )
       
   885             {
       
   886             iTNSyncWait->Start();
       
   887             }
       
   888         }
       
   889 #endif // RD_MPX_TNM_INTEGRATION
       
   890      }