mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp
branchRCL_3
changeset 12 51035f0751c2
parent 11 780c925249c1
child 13 4740b34b83ce
--- a/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -12,11 +12,10 @@
 * Contributors:
 *
 * Description:  Extracts metadata from a file
-*  Version     : %version: da1mmcf#38.1.4.2.6.1.7 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: da1mmcf#38.1.4.2.6.1.9 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
-
 #include <e32base.h>
 #include <badesca.h>
 #include <apgcli.h>
@@ -45,10 +44,14 @@
 
 #include "mpxmetadataextractor.h"
 #include "mpxfileinfoutility.h"
+
+_LIT( KWmaMimeType, "audio/x-ms-wma" );
+_LIT( KWmaCafMimeType, "x-caf-audio/x-ms-wma" );
+
 #ifdef RD_MPX_TNM_INTEGRATION
 _LIT( KImageFileType, "image/jpeg" );
 const TInt KMPXTimeoutTimer = 3000000; // 3 seconds
-const TInt KMPXMaxThumbnailRequest = 5; 
+const TInt KMPXMaxThumbnailRequest = 2; 
 #endif //RD_MPX_TNM_INTEGRATION
 
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
@@ -239,6 +242,8 @@
     TInt err = file.Open( iFs, *fileName, EFileRead | EFileShareReadersOrWriters );
     CleanupClosePushL(file);
     
+    // Initially set default tags.
+    SetDefaultL( *media );
     // Metadata related
     //
     if( err == KErrNone )
@@ -247,32 +252,18 @@
         HBufC8* mimeType8 = HBufC8::NewLC( mimeType.Length() );
         mimeType8->Des().Append( mimeType );
         TRAPD( metadataerror, iMetadataUtility->OpenFileL( file, *mimeType8 ) );
+        MPX_DEBUG2("CMPXMetadataExtractor::CreateMediaL, error %d parsing metadata", 
+            metadataerror );
         CleanupStack::PopAndDestroy( mimeType8 );
-
-        // No problem
-        if( KErrNone == metadataerror )
-            {
-            // Add TRAPD to capture exception KErrNoMemory.
-            //If album art size is too large, trap this exception and SetDefaultL.
-            //Fix EYLU-7ESE5L
-            TRAPD( err, SetMediaPropertiesL( *media, *fileName ) );
-            if ( KErrNoMemory == err )
-                {
-                SetDefaultL( *media );
-                }
-            }
-        else  // Error, Set defaults
-            {
-            SetDefaultL( *media );
-            }
+        
+        // Even if there is error extracting metadata, fill extracted tags.
+        TRAP( metadataerror, SetMediaPropertiesL( *media, *fileName ) ); 
+        MPX_DEBUG2("CMPXMetadataExtractor::CreateMediaL, error %d setting tags", 
+            metadataerror );
 
         // Reset the utility
         iMetadataUtility->ResetL();
         }
-    else // Error, Set defaults
-        {
-        SetDefaultL( *media );
-        }
     
     // Common properties that we can extract
     //
@@ -461,11 +452,17 @@
                 if ( KErrNone != err )
                     {
                     MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error jpeg = %i", err);           
-                    User::Leave( err );  
-                    }                 
-                CleanupStack::PushL( value8 );
-                AddMediaAlbumArtL( aMedia, aFile, *value8 );
-                CleanupStack::Pop( value8 );
+                    }
+                else
+                    {
+                    CleanupStack::PushL( value8 );
+                    TRAPD( err, AddMediaAlbumArtL( aMedia, aFile, *value8 ) );
+                    if ( KErrNone != err )
+                        {
+                        MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error album art = %i", err);           
+                        }
+                    CleanupStack::Pop( value8 );
+                    }
                 MPX_PERF_END(CMPXMetadataExtractor_SetMediaPropertiesL_JPEG_TNM);
 #else //RD_MPX_TNM_INTEGRATION
                 aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName,
@@ -479,11 +476,33 @@
                                       *value );
                 break;
                 }
+            case EMetaDataDuration:     
+                {                  
+                const TDesC& mimeType = aMedia.ValueText( KMPXMediaGeneralMimeType );
+                MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, mimeType = %S", &mimeType);   
+                
+                // Verify if WMA, get the duration
+                if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
+                    {
+                    MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");                         
+
+                    // Perform the duration conversion
+                    TLex lexer( *value );
+                    TInt32 duration ( 0 );
+                    lexer.Val( duration );   // [second]      
+                    duration *= 1000;        // [msec]
+                
+                    aMedia.SetTObjectValueL<TInt32>( KMPXMediaGeneralDuration,
+                                                duration );      
+                
+                    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- duration = %i", duration);  
+                    }
+                break;
+                }
             case EMetaDataOriginalArtist:  // fall through
             case EMetaDataVendor:          // fall through
             case EMetaDataRating:          // fall through
             case EMetaDataUniqueFileIdentifier:  // fall through
-            case EMetaDataDuration:        // fall through
             case EMetaDataDate:            // fall through
                 {
                 // not used
@@ -580,33 +599,49 @@
     
     iDrmMediaUtility->Close();
     
-    // File Size
+    //
+    // File Size --- The following needs MMF support
     //
     TInt size( 0 );
     if( aFileErr == KErrNone )
         {
-        aFileHandle.Size( size );
-        aProp.SetTObjectValueL<TInt>( KMPXMediaGeneralSize,
-                                      size );
+        const TDesC& mimeType = aProp.ValueText( KMPXMediaGeneralMimeType );
+        MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, mimeType = %S", &mimeType);   
+        
+        // Verify if WMA, skip getting info from MMF
+        if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
+            {
+            // No need to get MMF support
+            MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, skip MMF ");   
+            }
+        else
+            {
+            MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, get MMF controller");   
+            aFileHandle.Size( size );
+            aProp.SetTObjectValueL<TInt>( KMPXMediaGeneralSize, size );
 
-        // Duration, bitrate, samplerate, etc
-        //
-        if( !aMetadataOnly )
+            // Duration, bitrate, samplerate, etc
+            //
+            if( !aMetadataOnly )
             {
-            TRAPD(err2, iFileInfoUtil->OpenFileL(
+                TRAPD(err2, iFileInfoUtil->OpenFileL(
                           aFileHandle, 
                           aProp.ValueText(KMPXMediaGeneralMimeType)));
-            MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, file info util error %i", err2);
-            if( KErrNone == err2 )
-                {
-                aProp.SetTObjectValueL<TUint>( KMPXMediaAudioBitrate,
-                                               iFileInfoUtil->BitRate() );
-                aProp.SetTObjectValueL<TUint>( KMPXMediaAudioSamplerate,
-                                               iFileInfoUtil->SampleRate() );
-                TInt64 duration = (TInt64) iFileInfoUtil->Duration().Int64() / 1000; // ms
-                aProp.SetTObjectValueL<TInt32>( KMPXMediaGeneralDuration,
-                                              duration );
-                MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL -- duration %i", duration);
+                MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, file info util error %i", err2);
+                if( KErrNone == err2 )
+                    {
+                    aProp.SetTObjectValueL<TUint>( KMPXMediaAudioBitrate,
+                                                   iFileInfoUtil->BitRate() );
+                    aProp.SetTObjectValueL<TUint>( KMPXMediaAudioSamplerate,
+                                                   iFileInfoUtil->SampleRate() );
+                    TInt64 duration = (TInt64) iFileInfoUtil->Duration().Int64() / 1000; // ms
+                    aProp.SetTObjectValueL<TInt32>( KMPXMediaGeneralDuration,
+                                                    duration );
+
+                    MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL -- duration %i", duration);
+                    }
+                
+                iFileInfoUtil->Reset();
                 }
             }
         }
@@ -618,8 +653,6 @@
     //
     aProp.SetTObjectValueL( KMPXMediaGeneralFlags,
                             dbFlags );
-
-    iFileInfoUtil->Reset();
     
     MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL --->");
     }
@@ -667,8 +700,10 @@
         MThumbnailData& /*aThumbnail*/, TThumbnailRequestId /*aId*/ )
     {
     MPX_FUNC("CMPXMetadataExtractor::ThumbnailReady()");
+    MPX_DEBUG2("CMPXMetadataExtractor::ThumbnailReady(): iOutstandingThumbnailRequest %d",
+        iOutstandingThumbnailRequest);
     iOutstandingThumbnailRequest--;
-    if ( iOutstandingThumbnailRequest <= KMPXMaxThumbnailRequest )
+    if ( iOutstandingThumbnailRequest < KMPXMaxThumbnailRequest )
         {
         StopWaitLoop();
         }
@@ -867,8 +902,10 @@
      {
      MPX_FUNC("CMPXMetadataExtractor::CheckBeforeSendRequest()");
 #ifdef RD_MPX_TNM_INTEGRATION
+    MPX_DEBUG2("CMPXMetadataExtractor::CheckBeforeSendRequest(): iOutstandingThumbnailRequest %d",
+        iOutstandingThumbnailRequest);
 	// If thumbnail creation is ongoing, wait til it is done
-    if ( iOutstandingThumbnailRequest > KMPXMaxThumbnailRequest )
+    if ( iOutstandingThumbnailRequest >= KMPXMaxThumbnailRequest )
         {
         MPX_DEBUG1("CMPXMetadataExtractor::CheckBeforeSendRequest(): Thumbnail creation ongoing!");
         iTNMBlockCount++;