mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp
changeset 25 d881023c13eb
parent 0 a2952bb97e68
child 27 cbb1bfb7ebfb
--- a/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp	Fri Apr 16 15:28:14 2010 +0300
+++ b/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp	Mon May 03 12:58:40 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  Extracts metadata from a file
-*  Version     : %version: da1mmcf#38.1.4.2.6.1.5 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: da1mmcf#38.1.4.2.6.1.5.3.1 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -51,6 +51,9 @@
 const TInt KMPXMaxThumbnailRequest = 5; 
 #endif //RD_MPX_TNM_INTEGRATION
 
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
+_LIT( KNonEmbeddedArtExt, ".alb" );
+#endif
 //Helper functions
 static void FindAndReplaceForbiddenChars(TDes& aString, TInt aLen)
     {
@@ -337,14 +340,21 @@
         TMetaDataFieldId fieldType;
 
         HBufC* value = NULL;
-        TRAPD( err, value = metaCont.At( i, fieldType ).AllocL() );
-        CleanupStack::PushL(value);
-        if ( KErrNone != err )
-        {
-            CleanupStack::PopAndDestroy(value);
-            continue;
-        }
-
+        metaCont.FieldIdAt( i, fieldType );  // get the field type
+        
+        // get the value, except for album art
+        if ( fieldType != EMetaDataJpeg )
+           {
+           TRAPD( err, value = metaCont.At( i, fieldType ).AllocL() );
+           CleanupStack::PushL( value );
+           if ( KErrNone != err )
+               {
+               MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error = %i", err);           
+               CleanupStack::PopAndDestroy( value );
+               continue;
+               }     
+           }
+        
         switch( fieldType )
             {
             case EMetaDataSongTitle:
@@ -445,7 +455,14 @@
                 {
 #ifdef RD_MPX_TNM_INTEGRATION
                 MPX_PERF_START(CMPXMetadataExtractor_SetMediaPropertiesL_JPEG_TNM);
-                HBufC8* value8 = MPXUser::Alloc8L(metaCont.At( i, fieldType ));
+                TPtrC8 ptr8 = metaCont.Field8( EMetaDataJpeg );
+                HBufC8* value8; 
+                TRAPD( err, value8 = ptr8.AllocL() );
+                if ( KErrNone != err )
+                    {
+                    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error jpeg = %i", err);           
+                    User::Leave( err );  
+                    }                 
                 CleanupStack::PushL( value8 );
                 AddMediaAlbumArtL( aMedia, aFile, *value8 );
                 CleanupStack::Pop(value8);
@@ -478,7 +495,10 @@
                 break;
                 }
             }
-        CleanupStack::PopAndDestroy(value);
+        if (fieldType != EMetaDataJpeg)
+            {
+            CleanupStack::PopAndDestroy( value );       
+            }
         }
 
     MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL --->" );
@@ -717,7 +737,31 @@
     // Get full file name.
     const TDesC& path = aMedia->ValueText(KMPXMediaGeneralUri);
     MPX_DEBUG2("CMPXMetadataExtractor::ExtractAlbumArtL Filename:%S ", &path );
-    
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
+    TParsePtrC parse( path );
+    TPtrC ext( parse.Ext() );
+    if (ext.CompareF(KNonEmbeddedArtExt)== 0)
+        {
+		#ifdef RD_MPX_TNM_INTEGRATION
+
+        //check if can send TN request, If thumbnail creation is ongoing, wait til it is done
+        CheckBeforeSendRequest();
+
+        CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC(
+           path, KImageFileType  );
+          
+       
+
+        iTNManager->CreateThumbnails( *source );
+        
+        iOutstandingThumbnailRequest++;
+        CleanupStack::PopAndDestroy( source );
+
+        #endif
+        }
+    else
+        {
+#endif
     // create wanted fields array
     RArray<TMetaDataFieldId> wantedFields;
     CleanupClosePushL( wantedFields );
@@ -746,7 +790,9 @@
 
     // Reset the utility
     iMetadataUtility->ResetL();
-    
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
+      }
+#endif
     return err;
     }
 
@@ -761,13 +807,20 @@
     // get metadata container.
     const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL();
 
-    TPtrC data = metaCont.Field( EMetaDataJpeg );
+    TPtrC8 data8 = metaCont.Field8( EMetaDataJpeg );
     
-    if ( data.Length() )
+    if ( data8.Length() )
         {
         MPX_DEBUG1("CMPXMetadataExtractor::GetMediaAlbumArtL(): Album art exist.");
+
 #ifdef RD_MPX_TNM_INTEGRATION
-        HBufC8* value8 = MPXUser::Alloc8L( data );       
+        HBufC8* value8; 
+        TRAPD( err, value8 = data8.AllocL() );
+        if ( KErrNone != err )
+            {
+            MPX_DEBUG2("CMPXMetadataExtractor::GetMediaAlbumArtL - error jpeg = %i", err);           
+            User::Leave( err );  
+            }              
         CleanupStack::PushL( value8 );
         AddMediaAlbumArtL( aMedia, aFile, *value8 );
         CleanupStack::Pop(value8);
@@ -793,26 +846,9 @@
     MPX_FUNC("CMPXMetadataExtractor::AddMediaAlbumArtL()");
 #ifdef RD_MPX_TNM_INTEGRATION
     
-    // If thumbnail creation is ongoing, wait til it is done
-    if ( iOutstandingThumbnailRequest > KMPXMaxThumbnailRequest )
-        {
-        MPX_DEBUG1("CMPXMetadataExtractor::AddMediaAlbumArtL(): Thumbnail creation ongoing!");
-        iTNMBlockCount++;
-        // Cancel timer.
-        CancelTimeoutTimer();
-        // Start timer in case there is no callback from ThumbNail Manager. 
-        iTimer->Start(
-            KMPXTimeoutTimer,
-            KMPXTimeoutTimer,
-            TCallBack(TimeoutTimerCallback, this ));
-        
-        // Start wait loop until we get a callback from ThumbNail Manager.
-        if ( !iTNSyncWait->IsStarted() )
-            {
-            iTNSyncWait->Start();
-            }
-        }
-    
+    //check if can send TN request, If thumbnail creation is ongoing, wait til it is done
+    CheckBeforeSendRequest();
+
     aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName, aFile );
     
     TBuf<256> mimeType;
@@ -826,3 +862,29 @@
     
 #endif // RD_MPX_TNM_INTEGRATION          
     }
+
+void CMPXMetadataExtractor::CheckBeforeSendRequest()
+     {
+     MPX_FUNC("CMPXMetadataExtractor::CheckBeforeSendRequest()");
+#ifdef RD_MPX_TNM_INTEGRATION
+	// If thumbnail creation is ongoing, wait til it is done
+    if ( iOutstandingThumbnailRequest > KMPXMaxThumbnailRequest )
+        {
+        MPX_DEBUG1("CMPXMetadataExtractor::CheckBeforeSendRequest(): Thumbnail creation ongoing!");
+        iTNMBlockCount++;
+        // Cancel timer.
+        CancelTimeoutTimer();
+        // Start timer in case there is no callback from ThumbNail Manager.
+        iTimer->Start(
+            KMPXTimeoutTimer,
+            KMPXTimeoutTimer,
+            TCallBack(TimeoutTimerCallback, this ));
+
+        // Start wait loop until we get a callback from ThumbNail Manager.
+        if ( !iTNSyncWait->IsStarted() )
+            {
+            iTNSyncWait->Start();
+            }
+        }
+#endif // RD_MPX_TNM_INTEGRATION
+     }