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 |
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 |
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 } |