--- a/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp Tue Aug 31 15:41:40 2010 +0300
+++ b/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp Wed Sep 01 12:23:05 2010 +0100
@@ -12,7 +12,7 @@
* Contributors:
*
* Description: Extracts metadata from a file
-* Version : %version: da1mmcf#38.1.4.2.6.1.5.3.8 % << Don't touch! Updated by Synergy at check-out.
+* Version : %version: da1mmcf#38.1.4.2.6.1.15 % << Don't touch! Updated by Synergy at check-out.
*
*/
@@ -52,7 +52,7 @@
#ifdef RD_MPX_TNM_INTEGRATION
_LIT( KImageFileType, "image/jpeg" );
const TInt KMPXTimeoutTimer = 3000000; // 3 seconds
-const TInt KMPXMaxThumbnailRequest = 2;
+const TInt KMPXMaxThumbnailRequest = 2;
#endif //RD_MPX_TNM_INTEGRATION
#ifdef ABSTRACTAUDIOALBUM_INCLUDED
@@ -186,10 +186,10 @@
aNewProperty = NULL;
iFileName = aFile;
iMetadataOnly = aMetadataOnly;
-
+
// populate the task array
AddTasksL();
-
+
// execute all tasks in the array
while ( iArrayTasks.Count() )
{
@@ -211,10 +211,10 @@
}
break;
}
-
+
iArrayTasks.Remove( 0 );
}
-
+
aNewProperty = iMedia;
iMedia = NULL; // ownership transferred.
CleanUp();
@@ -236,6 +236,9 @@
// Album
aMediaProp.SetTextValueL( KMPXMediaMusicAlbum,
KNullDesC );
+ // Year
+ aMediaProp.SetTObjectValueL<TInt64>( KMPXMediaMusicYear,
+ (TInt64) 0 );
// Track
aMediaProp.SetTextValueL( KMPXMediaMusicAlbumTrack,
KNullDesC );
@@ -251,10 +254,6 @@
// URL
aMediaProp.SetTextValueL( KMPXMediaMusicURL,
KNullDesC );
- // AlbumArtist
- aMediaProp.SetTextValueL( KMPXMediaMusicAlbumArtist,
- KNullDesC );
-
}
// ---------------------------------------------------------------------------
@@ -268,20 +267,20 @@
const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
HBufC8* mimeType8 = HBufC8::NewLC( mimeType.Length() );
mimeType8->Des().Append( mimeType );
-
+
// Continue to extract metadata even if fail.
MPX_TRAPD( metadataerror, iMetadataUtility->OpenFileL( iFile, *mimeType8 ) );
CleanupStack::PopAndDestroy( mimeType8 );
-
+
// Get MetadataUtility Container
const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL();
// Get DRM data
// Need the protected flag from metadataUtility Container
MPX_TRAPD( drmerror, SetDrmMediaPropertiesL( metaCont ) );
- MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, result=%d getting drm data",
+ MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, result=%d getting drm data",
drmerror );
-
+
// Get metadata fields
TInt count( metaCont.Count() );
for( TInt i=0; i<count; ++i )
@@ -290,19 +289,19 @@
HBufC* value = NULL;
metaCont.FieldIdAt( i, fieldType ); // get the field type
-
+
// get the value, except for album art
if ( fieldType != EMetaDataJpeg )
{
MPX_TRAPD( err, value = metaCont.At( i, fieldType ).AllocL() );
if ( KErrNone != err )
{
- MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error = %i", err);
+ MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error = %i", err);
continue;
- }
+ }
CleanupStack::PushL( value );
}
-
+
switch( fieldType )
{
case EMetaDataSongTitle:
@@ -410,82 +409,70 @@
*value );
break;
}
- case EMetaDataDuration:
- {
+ case EMetaDataDuration:
+ {
const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
- MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);
-
+ MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);
+
// Verify if WMA, get the duration
if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
{
- MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");
+ MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");
// Perform the duration conversion
TLex lexer( *value );
TInt32 duration ( 0 );
- lexer.Val( duration ); // [second]
+ lexer.Val( duration ); // [second]
duration *= 1000; // [msec]
-
+
iMedia->SetTObjectValueL<TInt32>( KMPXMediaGeneralDuration,
- duration );
-
- MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- duration = %i", duration);
+ duration );
+
+ MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- duration = %i", duration);
}
break;
}
- case EMetaDataSampleRate:
- {
+ case EMetaDataSampleRate:
+ {
const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
- MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);
-
+ MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);
+
// Verify if WMA, get the sample rate
if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
{
- MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");
+ MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");
// Perform the sample rate conversion
TLex lexer( *value );
TInt32 sampleRate ( 0 );
- lexer.Val( sampleRate );
-
+ lexer.Val( sampleRate );
+
iMedia->SetTObjectValueL<TUint>( KMPXMediaAudioSamplerate,
sampleRate );
-
- MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- sample rate = %i", sampleRate);
+
+ MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- sample rate = %i", sampleRate);
}
break;
}
- case EMetaDataBitRate:
- {
+ case EMetaDataBitRate:
+ {
const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
- MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);
-
+ MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);
+
// Verify if WMA, get the duration
if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
{
- MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");
+ MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");
// Perform the duration conversion
TLex lexer( *value );
TInt32 bitRate ( 0 );
- lexer.Val( bitRate );
-
+ lexer.Val( bitRate );
+
iMedia->SetTObjectValueL<TUint>( KMPXMediaAudioBitrate,
bitRate );
-
- MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- duration = %i", bitRate);
- }
- break;
- }
- case EMetaDataAlbumArtist:
- {
- TPtr valptr = value->Des();
- valptr.Trim();
- TInt vallen = value->Length();
- if (vallen>0)
- {
- FindAndReplaceForbiddenChars(valptr, vallen);
- iMedia->SetTextValueL(KMPXMediaMusicAlbumArtist, *value);
+
+ MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- duration = %i", bitRate);
}
break;
}
@@ -506,7 +493,7 @@
}
if (fieldType != EMetaDataJpeg)
{
- CleanupStack::PopAndDestroy( value );
+ CleanupStack::PopAndDestroy( value );
}
}
}
@@ -526,25 +513,25 @@
if( iFileOpenError == KErrNone )
{
const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
- MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, mimeType = %S", &mimeType);
+ MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, mimeType = %S", &mimeType);
iFile.Size( size );
iMedia->SetTObjectValueL<TInt>( KMPXMediaGeneralSize, size );
-
+
// 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 ");
+ MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, skip MMF ");
}
else
{
- MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, get MMF controller");
+ MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, get MMF controller");
// Duration, bitrate, samplerate, etc
//
if( !iMetadataOnly )
{
MPX_TRAPD(err2, iFileInfoUtil->OpenFileL(
- iFile,
+ iFile,
iMedia->ValueText(KMPXMediaGeneralMimeType)));
MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, file info util error %i", err2);
if( KErrNone == err2 )
@@ -559,7 +546,7 @@
MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL -- duration %i", duration);
}
-
+
iFileInfoUtil->Reset();
}
}
@@ -595,22 +582,22 @@
// CMPXMetadataExtractor::ThumbnailPreviewReady
// Callback but not used here
// ---------------------------------------------------------------------------
-void CMPXMetadataExtractor::ThumbnailPreviewReady(
+void CMPXMetadataExtractor::ThumbnailPreviewReady(
MThumbnailData& /*aThumbnail*/, TThumbnailRequestId /*aId*/ )
{
MPX_FUNC("CMPXMetadataExtractor::ThumbnailPreviewReady()");
}
-
+
// ---------------------------------------------------------------------------
// CMPXMetadataExtractor::ThumbnailReady
// Callback but not used here
// ---------------------------------------------------------------------------
-void CMPXMetadataExtractor::ThumbnailReady( TInt /*aError*/,
+void CMPXMetadataExtractor::ThumbnailReady( TInt /*aError*/,
MThumbnailData& /*aThumbnail*/, TThumbnailRequestId aId )
{
MPX_FUNC("CMPXMetadataExtractor::ThumbnailReady()");
-
+
// Remove thumbnail id from array.
TInt index = iArrayTNRequestId.Find( aId );
if ( index >= 0 )
@@ -635,8 +622,8 @@
CMPXMetadataExtractor* ptr =
static_cast<CMPXMetadataExtractor*>(aPtr);
-
- // Timer expired before thumbnail callback occurred. Stop wait loop to unblock.
+
+ // Timer expired before thumbnail callback occurred. Stop wait loop to unblock.
ptr->StopWaitLoop();
return KErrNone;
}
@@ -649,7 +636,7 @@
MPX_FUNC("CMPXMetadataExtractor::StopWaitLoop()");
// Cancel timer
CancelTimeoutTimer();
-
+
// Stop wait loop to unblock.
if ( iTNSyncWait->IsStarted() )
{
@@ -659,12 +646,12 @@
}
// ----------------------------------------------------------------------------
-// Cancel timer.
+// Cancel timer.
// ----------------------------------------------------------------------------
void CMPXMetadataExtractor::CancelTimeoutTimer()
{
MPX_FUNC("CMPXMetadataExtractor::CancelTimeoutTimer()");
-
+
// Cancel timer.
if ( iTimer && iTimer->IsActive() )
{
@@ -681,12 +668,12 @@
MPX_FUNC("CMPXMetadataExtractor::ExtractAlbumArtL()");
TInt err = KErrNone;
iCancelled = EFalse;
-
+
if ( !aMedia->IsSupported(KMPXMediaGeneralUri) )
{
return KErrArgument;
}
-
+
// Get full file name.
const TDesC& path = aMedia->ValueText(KMPXMediaGeneralUri);
MPX_DEBUG2("CMPXMetadataExtractor::ExtractAlbumArtL Filename:%S ", &path );
@@ -708,7 +695,7 @@
HBufC8* value8 = ((HBufC8*)sampleData)->Des().AllocLC(); // make a local copy of sampleData
source = CThumbnailObjectSource::NewLC(
value8, mimeType, path ); // give up ownership of value8
-
+
MPX_DEBUG1("CMPXMetadataExtractor::ExtractAlbumArtL source created from buffer");
TThumbnailRequestId tnId = iTNManager->CreateThumbnails( *source );
iArrayTNRequestId.Append( tnId );
@@ -719,7 +706,7 @@
{
source = CThumbnailObjectSource::NewLC(
path, KImageFileType );
-
+
MPX_DEBUG1("CMPXMetadataExtractor::ExtractAlbumArtL source created from path");
TThumbnailRequestId tnId = iTNManager->CreateThumbnails( *source );
iArrayTNRequestId.Append( tnId );
@@ -734,7 +721,7 @@
RArray<TMetaDataFieldId> wantedFields;
CleanupClosePushL( wantedFields );
wantedFields.Append(EMetaDataJpeg);
-
+
// Open file
if ( aMedia->IsSupported(KMPXMediaGeneralMimeType) )
{
@@ -750,7 +737,7 @@
MPX_TRAP( err, iMetadataUtility->OpenFileL( path, wantedFields ) );
}
CleanupStack::PopAndDestroy( &wantedFields );
-
+
if ( !err )
{
//check if can send TN request, If thumbnail creation is ongoing, wait til it is done
@@ -769,28 +756,28 @@
// ----------------------------------------------------------------------------
// Add album art to media object.
// ----------------------------------------------------------------------------
-void CMPXMetadataExtractor::AddMediaAlbumArtL( CMPXMedia& aMedia,
+void CMPXMetadataExtractor::AddMediaAlbumArtL( CMPXMedia& aMedia,
const TDesC& aFile )
{
MPX_FUNC("CMPXMetadataExtractor::AddMediaAlbumArtL()");
-
+
// get metadata container.
const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL();
TPtrC8 data8 = metaCont.Field8( EMetaDataJpeg );
-
+
if ( data8.Length() )
{
MPX_DEBUG1("CMPXMetadataExtractor::GetMediaAlbumArtL(): Album art exist.");
#ifdef RD_MPX_TNM_INTEGRATION
- HBufC8* value8 = NULL;
+ HBufC8* value8 = NULL;
MPX_TRAPD( err, value8 = data8.AllocL() );
if ( KErrNone != err )
{
MPX_DEBUG2("CMPXMetadataExtractor::GetMediaAlbumArtL - error jpeg = %i", err);
return;
- }
+ }
CleanupStack::PushL( value8 );
-
+
TBuf<256> mimeType;
mimeType.Copy( KImageFileType );
CThumbnailObjectSource* source = CThumbnailObjectSource::NewL(
@@ -799,9 +786,9 @@
iArrayTNRequestId.Append( tnId ); // add thumbnail id to array
CleanupStack::Pop( value8 );
delete source;
-
+
aMedia.SetTextValueL( KMPXMediaMusicOriginalAlbumArtFileName, aFile );
-#endif // RD_MPX_TNM_INTEGRATION
+#endif // RD_MPX_TNM_INTEGRATION
aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName, aFile );
}
}
@@ -939,23 +926,10 @@
{
TDataType dataType;
TUid dummyUid(KNullUid);
- // File handle based mime type recogniton required , because AppArc does
- // not have All Files capa required for files in private folders
- TDataRecognitionResult result;
- RFs fs;
- RFile rFile;
- User::LeaveIfError(fs.Connect());
- CleanupClosePushL(fs);
- User::LeaveIfError(fs.ShareProtected());
- User::LeaveIfError(rFile.Open(fs, iFileName, EFileShareReadersOrWriters));
- CleanupClosePushL(rFile);
- User::LeaveIfError(iAppArc.RecognizeData(rFile, result));
- CleanupStack::PopAndDestroy(&rFile);
- CleanupStack::PopAndDestroy(&fs);
- dataType = result.iDataType;
+ iAppArc.AppForDocument(iFileName, dummyUid, dataType);
iMedia->SetTextValueL( KMPXMediaGeneralMimeType,dataType.Des() );
}
-
+
// Initially set default tags.
SetDefaultL( *iMedia );
}
@@ -1007,23 +981,23 @@
MPX_DEBUG1("CMPXMetadataExtractor::CreateMediaAsyncL Request ongoing. Abort!" );
User::Leave( KErrAbort );
}
-
+
iCancelled = EFalse;
iFileOpenError = KErrNone;
iFileName = aFile;
iObs = aObs;
iMetadataOnly = aMetadataOnly;
-
+
// populate the task array
AddTasksL();
-
+
// Start task timer to execute task
if ( iArrayTasks.Count() )
{
if ( iTaskTimer->IsActive() )
{
iTaskTimer->Cancel();
- }
+ }
iTaskTimer->Start( 0, 0, TCallBack(TaskTimerCallback, this ));
}
}
@@ -1035,7 +1009,7 @@
TInt CMPXMetadataExtractor::OpenFile()
{
MPX_FUNC("CMPXMetadataExtractor::OpenFile()");
-
+
// Open the file
iFile.Close();
TInt error = iFile.Open( iFs, iFileName, EFileRead | EFileShareReadersOrWriters );
@@ -1051,7 +1025,7 @@
{
MPX_FUNC("CMPXMetadataExtractor::AddTasks()");
iFileOpenError = OpenFile();
-
+
// Do not change the order of the task below.
iArrayTasks.Reset();
if ( iFileOpenError == KErrNone )
@@ -1092,7 +1066,7 @@
void CMPXMetadataExtractor::HandleTaskTimerExpired()
{
MPX_FUNC("CMPXMetadataExtractor::HandleTaskTimerExpired()");
-
+
if ( iTaskTimer && iTaskTimer->IsActive() )
{
iTaskTimer->Cancel();
@@ -1109,13 +1083,13 @@
}
iArrayTasks.Reset();
}
-
+
// Remove task at index 0.
if ( iArrayTasks.Count() )
{
iArrayTasks.Remove( 0 );
}
-
+
// check if we have any more task to run
if ( iArrayTasks.Count() )
{
@@ -1130,7 +1104,7 @@
iObs->HandleCreateMediaComplete( iMedia, error );
iMedia = NULL; // ownership transferred.
}
-
+
CleanUp();
}
}
@@ -1161,7 +1135,7 @@
// Validate the objects to be used
MPX_ASSERT(iMedia);
MPX_ASSERT(iDrmMediaUtility);
-
+
// File Path
TParsePtrC parse( iFileName );
iMedia->SetTextValueL( KMPXMediaGeneralUri, iFileName );
@@ -1169,7 +1143,7 @@
MPX_DEBUG2("CMPXMetadataExtractor::SetDrmMediaPropertiesL - Filename=%S", &iFileName);
// get the protected flag from MetadataUtility Container
- TPtrC ptr = aMetaCont.Field( EMetaDataProtected );
+ TPtrC ptr = aMetaCont.Field( EMetaDataProtected );
MPX_DEBUG2("CMPXMetadataExtractor::SetDrmMediaPropertiesL -- status=%S", &ptr);
_LIT( KNonProtected, "0" );
if ( ptr.Compare( KNonProtected ) == 0 )
@@ -1180,7 +1154,7 @@
iMedia->SetTObjectValueL<TBool>( KMPXMediaDrmProtected, prot );
iMedia->SetTObjectValueL<TUint16>( KMPXMediaMTPDrmStatus, (TUint16)prot );
}
- else
+ else
{ // DRM file
// DRM Rights
@@ -1232,20 +1206,20 @@
iMedia->SetTObjectValueL<TBool>( KMPXMediaDrmProtected, prot );
iMedia->SetTObjectValueL<TUint16>( KMPXMediaMTPDrmStatus, (TUint16)prot );
-
+
iDrmMediaUtility->Close();
-
+
} // DRM file
-
+
// verify the file open status
if( iFileOpenError == KErrNotFound || iFileOpenError == KErrPathNotFound )
{
dbFlags |= KMPXMediaGeneralFlagsIsInvalid;
}
-
+
// Finally set the db flag
//
iMedia->SetTObjectValueL( KMPXMediaGeneralFlags, dbFlags );
-
+
}