262 const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType ); |
262 const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType ); |
263 HBufC8* mimeType8 = HBufC8::NewLC( mimeType.Length() ); |
263 HBufC8* mimeType8 = HBufC8::NewLC( mimeType.Length() ); |
264 mimeType8->Des().Append( mimeType ); |
264 mimeType8->Des().Append( mimeType ); |
265 |
265 |
266 // Continue to extract metadata even if fail. |
266 // Continue to extract metadata even if fail. |
267 TRAPD( metadataerror, iMetadataUtility->OpenFileL( iFile, *mimeType8 ) ); |
267 MPX_TRAPD( metadataerror, iMetadataUtility->OpenFileL( iFile, *mimeType8 ) ); |
268 MPX_DEBUG2("CMPXMetadataExtractor::CreateMediaL, error %d parsing metadata", |
|
269 metadataerror ); |
|
270 CleanupStack::PopAndDestroy( mimeType8 ); |
268 CleanupStack::PopAndDestroy( mimeType8 ); |
271 |
269 |
|
270 // Get MetadataUtility Container |
272 const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL(); |
271 const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL(); |
|
272 |
|
273 // Get DRM data |
|
274 // Need the protected flag from metadataUtility Container |
|
275 MPX_TRAPD( drmerror, SetDrmMediaPropertiesL( metaCont ) ); |
|
276 MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, result=%d getting drm data", |
|
277 drmerror ); |
|
278 |
|
279 // Get metadata fields |
273 TInt count( metaCont.Count() ); |
280 TInt count( metaCont.Count() ); |
274 for( TInt i=0; i<count; ++i ) |
281 for( TInt i=0; i<count; ++i ) |
275 { |
282 { |
276 TMetaDataFieldId fieldType; |
283 TMetaDataFieldId fieldType; |
277 |
284 |
279 metaCont.FieldIdAt( i, fieldType ); // get the field type |
286 metaCont.FieldIdAt( i, fieldType ); // get the field type |
280 |
287 |
281 // get the value, except for album art |
288 // get the value, except for album art |
282 if ( fieldType != EMetaDataJpeg ) |
289 if ( fieldType != EMetaDataJpeg ) |
283 { |
290 { |
284 TRAPD( err, value = metaCont.At( i, fieldType ).AllocL() ); |
291 MPX_TRAPD( err, value = metaCont.At( i, fieldType ).AllocL() ); |
285 if ( KErrNone != err ) |
292 if ( KErrNone != err ) |
286 { |
293 { |
287 MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error = %i", err); |
294 MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error = %i", err); |
288 continue; |
295 continue; |
289 } |
296 } |
448 // |
455 // |
449 void CMPXMetadataExtractor::SetExtMediaPropertiesL() |
456 void CMPXMetadataExtractor::SetExtMediaPropertiesL() |
450 { |
457 { |
451 MPX_FUNC("CMPXMetadataExtractor::SetExtMediaPropertiesL()"); |
458 MPX_FUNC("CMPXMetadataExtractor::SetExtMediaPropertiesL()"); |
452 |
459 |
453 // DB Flags to set |
|
454 // |
|
455 TUint dbFlags(KMPXMediaGeneralFlagsSetOrUnsetBit); |
|
456 |
|
457 // File Path |
|
458 // |
|
459 TParsePtrC parse( iFileName ); |
|
460 iMedia->SetTextValueL( KMPXMediaGeneralUri, iFileName ); |
|
461 iMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); |
|
462 |
|
463 // DRM Rights |
|
464 // |
|
465 CMPXMedia* drm = NULL; |
|
466 TRAPD( drmError, iDrmMediaUtility->InitL( iFileName ); |
|
467 drm = CMPXMedia::NewL( *iDrmMediaUtility->GetMediaL( KMPXMediaDrmProtected.iAttributeId | |
|
468 KMPXMediaDrmRightsStatus.iAttributeId ) ); |
|
469 ); |
|
470 |
|
471 TBool prot(EFalse); |
|
472 if( drm ) |
|
473 { |
|
474 CleanupStack::PushL( drm ); |
|
475 MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL -- is a drm file"); |
|
476 if( drm->IsSupported( KMPXMediaDrmProtected ) ) |
|
477 { |
|
478 prot = drm->ValueTObjectL<TBool>( KMPXMediaDrmProtected ); |
|
479 MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL protected %i", prot); |
|
480 } |
|
481 |
|
482 TMPXMediaDrmRightsStatus status(EMPXDrmRightsFull); |
|
483 if( drm->IsSupported( KMPXMediaDrmRightsStatus ) ) |
|
484 { |
|
485 status = drm->ValueTObjectL<TMPXMediaDrmRightsStatus>(KMPXMediaDrmRightsStatus); |
|
486 iMedia->SetTObjectValueL<TInt>(KMPXMediaDrmRightsStatus, status ); |
|
487 MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL -- status %i", status); |
|
488 } |
|
489 |
|
490 // Set DB flags |
|
491 dbFlags |= KMPXMediaGeneralFlagsIsDrmProtected; |
|
492 if( status != EMPXDrmRightsFull && status != EMPXDrmRightsRestricted && status != EMPXDrmRightsPreview ) |
|
493 { |
|
494 dbFlags |= KMPXMediaGeneralFlagsIsDrmLicenceInvalid; |
|
495 } |
|
496 CleanupStack::PopAndDestroy( drm ); |
|
497 } |
|
498 |
|
499 // Trapped PV DRM error. If -46, we know the file has no rights |
|
500 // |
|
501 if( drmError == KErrPermissionDenied ) |
|
502 { |
|
503 dbFlags |= KMPXMediaGeneralFlagsIsDrmLicenceInvalid; |
|
504 } |
|
505 else |
|
506 { |
|
507 User::LeaveIfError( drmError ); |
|
508 } |
|
509 |
|
510 iMedia->SetTObjectValueL<TBool>( KMPXMediaDrmProtected, prot ); |
|
511 iMedia->SetTObjectValueL<TUint16>( KMPXMediaMTPDrmStatus, (TUint16)prot ); |
|
512 |
|
513 iDrmMediaUtility->Close(); |
|
514 |
|
515 // |
460 // |
516 // File Size --- The following needs MMF support |
461 // File Size --- The following needs MMF support |
517 // |
462 // |
518 TInt size( 0 ); |
463 TInt size( 0 ); |
519 if( iFileOpenError == KErrNone ) |
464 if( iFileOpenError == KErrNone ) |
520 { |
465 { |
521 const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType ); |
466 const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType ); |
522 MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, mimeType = %S", &mimeType); |
467 MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, mimeType = %S", &mimeType); |
|
468 iFile.Size( size ); |
|
469 iMedia->SetTObjectValueL<TInt>( KMPXMediaGeneralSize, size ); |
523 |
470 |
524 // Verify if WMA, skip getting info from MMF |
471 // Verify if WMA, skip getting info from MMF |
525 if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 ) |
472 if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 ) |
526 { |
473 { |
527 // No need to get MMF support |
474 // No need to get MMF support |
528 MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, skip MMF "); |
475 MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, skip MMF "); |
529 } |
476 } |
530 else |
477 else |
531 { |
478 { |
532 MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, get MMF controller"); |
479 MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, get MMF controller"); |
533 iFile.Size( size ); |
|
534 iMedia->SetTObjectValueL<TInt>( KMPXMediaGeneralSize, size ); |
|
535 |
|
536 // Duration, bitrate, samplerate, etc |
480 // Duration, bitrate, samplerate, etc |
537 // |
481 // |
538 if( !iMetadataOnly ) |
482 if( !iMetadataOnly ) |
539 { |
483 { |
540 TRAPD(err2, iFileInfoUtil->OpenFileL( |
484 MPX_TRAPD(err2, iFileInfoUtil->OpenFileL( |
541 iFile, |
485 iFile, |
542 iMedia->ValueText(KMPXMediaGeneralMimeType))); |
486 iMedia->ValueText(KMPXMediaGeneralMimeType))); |
543 MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, file info util error %i", err2); |
487 MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, file info util error %i", err2); |
544 if( KErrNone == err2 ) |
488 if( KErrNone == err2 ) |
545 { |
489 { |
695 #ifdef ABSTRACTAUDIOALBUM_INCLUDED |
631 #ifdef ABSTRACTAUDIOALBUM_INCLUDED |
696 TParsePtrC parse( path ); |
632 TParsePtrC parse( path ); |
697 TPtrC ext( parse.Ext() ); |
633 TPtrC ext( parse.Ext() ); |
698 if (ext.CompareF(KNonEmbeddedArtExt)== 0) |
634 if (ext.CompareF(KNonEmbeddedArtExt)== 0) |
699 { |
635 { |
700 #ifdef RD_MPX_TNM_INTEGRATION |
636 #ifdef RD_MPX_TNM_INTEGRATION |
|
637 |
701 //check if can send TN request, If thumbnail creation is ongoing, wait til it is done |
638 //check if can send TN request, If thumbnail creation is ongoing, wait til it is done |
702 CheckBeforeSendRequest(); |
639 CheckBeforeSendRequest(); |
703 CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC( |
640 |
704 path, KImageFileType ); |
641 CThumbnailObjectSource* source( NULL ); |
705 TThumbnailRequestId tnId = iTNManager->CreateThumbnails( *source ); |
642 if (aMedia->IsSupported(KMPXMediaMTPSampleData)) |
706 iArrayTNRequestId.Append( tnId ); |
643 { |
707 CleanupStack::PopAndDestroy( source ); |
644 TBuf<20> mimeType(KImageFileType); |
708 #endif // RD_MPX_TNM_INTEGRATION |
645 TInt sampleData = aMedia->ValueTObjectL<TInt>(KMPXMediaMTPSampleData); |
|
646 HBufC8* value8 = ((HBufC8*)sampleData)->Des().AllocLC(); // make a local copy of sampleData |
|
647 source = CThumbnailObjectSource::NewLC( |
|
648 value8, mimeType, path ); // give up ownership of value8 |
|
649 |
|
650 MPX_DEBUG1("CMPXMetadataExtractor::ExtractAlbumArtL source created from buffer"); |
|
651 TThumbnailRequestId tnId = iTNManager->CreateThumbnails( *source ); |
|
652 iArrayTNRequestId.Append( tnId ); |
|
653 CleanupStack::PopAndDestroy( source ); |
|
654 CleanupStack::Pop( value8 ); |
|
655 } |
|
656 else |
|
657 { |
|
658 source = CThumbnailObjectSource::NewLC( |
|
659 path, KImageFileType ); |
|
660 |
|
661 MPX_DEBUG1("CMPXMetadataExtractor::ExtractAlbumArtL source created from path"); |
|
662 TThumbnailRequestId tnId = iTNManager->CreateThumbnails( *source ); |
|
663 iArrayTNRequestId.Append( tnId ); |
|
664 CleanupStack::PopAndDestroy( source ); |
|
665 } |
|
666 #endif // RD_MPX_TNM_INTEGRATION |
709 } |
667 } |
710 else |
668 else |
711 { |
669 { |
712 #endif // ABSTRACTAUDIOALBUM_INCLUDED |
670 #endif // ABSTRACTAUDIOALBUM_INCLUDED |
713 // create wanted fields array |
671 // create wanted fields array |
720 { |
678 { |
721 const TDesC& mimeType = aMedia->ValueText( KMPXMediaGeneralMimeType ); |
679 const TDesC& mimeType = aMedia->ValueText( KMPXMediaGeneralMimeType ); |
722 MPX_DEBUG2("CMPXMetadataExtractor::ExtractAlbumArtL MimeType:%S ", &mimeType ); |
680 MPX_DEBUG2("CMPXMetadataExtractor::ExtractAlbumArtL MimeType:%S ", &mimeType ); |
723 HBufC8* mimeType8 = HBufC8::NewLC( mimeType.Length() ); |
681 HBufC8* mimeType8 = HBufC8::NewLC( mimeType.Length() ); |
724 mimeType8->Des().Append( mimeType ); |
682 mimeType8->Des().Append( mimeType ); |
725 TRAP( err, iMetadataUtility->OpenFileL( path, wantedFields, *mimeType8 ) ); |
683 MPX_TRAP( err, iMetadataUtility->OpenFileL( path, wantedFields, *mimeType8 ) ); |
726 CleanupStack::PopAndDestroy( mimeType8 ); |
684 CleanupStack::PopAndDestroy( mimeType8 ); |
727 } |
685 } |
728 else |
686 else |
729 { |
687 { |
730 TRAP( err, iMetadataUtility->OpenFileL( path, wantedFields ) ); |
688 MPX_TRAP( err, iMetadataUtility->OpenFileL( path, wantedFields ) ); |
731 } |
689 } |
732 CleanupStack::PopAndDestroy( &wantedFields ); |
690 CleanupStack::PopAndDestroy( &wantedFields ); |
733 |
691 |
734 if ( !err ) |
692 if ( !err ) |
735 { |
693 { |
736 //check if can send TN request, If thumbnail creation is ongoing, wait til it is done |
694 //check if can send TN request, If thumbnail creation is ongoing, wait til it is done |
737 CheckBeforeSendRequest(); |
695 CheckBeforeSendRequest(); |
738 TRAP( err, AddMediaAlbumArtL( *aMedia, path )); |
696 MPX_TRAP( err, AddMediaAlbumArtL( *aMedia, path )); |
739 } |
697 } |
740 |
698 |
741 // Reset the utility |
699 // Reset the utility |
742 iMetadataUtility->ResetL(); |
700 iMetadataUtility->ResetL(); |
743 #ifdef ABSTRACTAUDIOALBUM_INCLUDED |
701 #ifdef ABSTRACTAUDIOALBUM_INCLUDED |
1017 |
975 |
1018 // Do not change the order of the task below. |
976 // Do not change the order of the task below. |
1019 iArrayTasks.Reset(); |
977 iArrayTasks.Reset(); |
1020 if ( iFileOpenError == KErrNone ) |
978 if ( iFileOpenError == KErrNone ) |
1021 { |
979 { |
|
980 // to avoid resources contention (i.e. accessing sql, file system, etc) |
|
981 // Ordering the tasks - so no multiple tasks run at the same time |
|
982 // put the longest running task at the last (i.e. thumbnailing) |
1022 iArrayTasks.AppendL(ETaskCreateMedia); |
983 iArrayTasks.AppendL(ETaskCreateMedia); |
1023 iArrayTasks.AppendL(ETaskAddMetadata); |
984 iArrayTasks.AppendL(ETaskAddExtMetadata); // Get the MMF first |
|
985 iArrayTasks.AppendL(ETaskAddMetadata); // Get metadata & maybe drm data |
1024 iArrayTasks.AppendL(ETaskCheckBeforeSend); |
986 iArrayTasks.AppendL(ETaskCheckBeforeSend); |
1025 iArrayTasks.AppendL(ETaskAddAlbumArt); |
987 iArrayTasks.AppendL(ETaskAddAlbumArt); // Get album art / thumbnail last |
1026 iArrayTasks.AppendL(ETaskAddExtMetadata); |
|
1027 } |
988 } |
1028 else |
989 else |
1029 { |
990 { |
1030 iArrayTasks.AppendL(ETaskCreateMedia); |
991 iArrayTasks.AppendL(ETaskCreateMedia); |
1031 iArrayTasks.AppendL(ETaskAddExtMetadata); |
992 iArrayTasks.AppendL(ETaskAddExtMetadata); |
1100 // Reset the utility |
1061 // Reset the utility |
1101 TRAP_IGNORE( iMetadataUtility->ResetL() ); |
1062 TRAP_IGNORE( iMetadataUtility->ResetL() ); |
1102 iFile.Close(); |
1063 iFile.Close(); |
1103 } |
1064 } |
1104 |
1065 |
|
1066 |
|
1067 // --------------------------------------------------------------------------- |
|
1068 // Sets DRRM media properties not returned by metadata utilities |
|
1069 // --------------------------------------------------------------------------- |
|
1070 // |
|
1071 void CMPXMetadataExtractor::SetDrmMediaPropertiesL(const CMetaDataFieldContainer& aMetaCont) |
|
1072 { |
|
1073 MPX_FUNC("CMPXMetadataExtractor::SetDrmMediaPropertiesL()"); |
|
1074 |
|
1075 TBool prot(EFalse); |
|
1076 // DB Flags to set |
|
1077 TUint dbFlags(KMPXMediaGeneralFlagsSetOrUnsetBit); |
|
1078 // Validate the objects to be used |
|
1079 MPX_ASSERT(iMedia); |
|
1080 MPX_ASSERT(iDrmMediaUtility); |
|
1081 |
|
1082 // File Path |
|
1083 TParsePtrC parse( iFileName ); |
|
1084 iMedia->SetTextValueL( KMPXMediaGeneralUri, iFileName ); |
|
1085 iMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); |
|
1086 MPX_DEBUG2("CMPXMetadataExtractor::SetDrmMediaPropertiesL - Filename=%S", &iFileName); |
|
1087 |
|
1088 // get the protected flag from MetadataUtility Container |
|
1089 TPtrC ptr = aMetaCont.Field( EMetaDataProtected ); |
|
1090 MPX_DEBUG2("CMPXMetadataExtractor::SetDrmMediaPropertiesL -- status=%S", &ptr); |
|
1091 _LIT( KNonProtected, "0" ); |
|
1092 if ( ptr.Compare( KNonProtected ) == 0 ) |
|
1093 { |
|
1094 // this is non-protected file |
|
1095 // prot = EFalse |
|
1096 MPX_DEBUG1("CMPXMetadataExtractor::SetDrmMediaPropertiesL - non protected"); |
|
1097 iMedia->SetTObjectValueL<TBool>( KMPXMediaDrmProtected, prot ); |
|
1098 iMedia->SetTObjectValueL<TUint16>( KMPXMediaMTPDrmStatus, (TUint16)prot ); |
|
1099 } |
|
1100 else |
|
1101 { // DRM file |
|
1102 |
|
1103 // DRM Rights |
|
1104 // |
|
1105 CMPXMedia* drm = NULL; |
|
1106 MPX_TRAPD( drmError, iDrmMediaUtility->InitL( iFileName ); |
|
1107 drm = CMPXMedia::NewL( *iDrmMediaUtility->GetMediaL( KMPXMediaDrmProtected.iAttributeId | |
|
1108 KMPXMediaDrmRightsStatus.iAttributeId ) ); |
|
1109 ); |
|
1110 |
|
1111 TBool prot(EFalse); |
|
1112 if( drm ) |
|
1113 { |
|
1114 CleanupStack::PushL( drm ); |
|
1115 MPX_DEBUG1("CMPXMetadataExtractor::SetDrmMediaPropertiesL -- is a drm file"); |
|
1116 if( drm->IsSupported( KMPXMediaDrmProtected ) ) |
|
1117 { |
|
1118 prot = drm->ValueTObjectL<TBool>( KMPXMediaDrmProtected ); |
|
1119 MPX_DEBUG2("CMPXMetadataExtractor::SetDrmMediaPropertiesL protected %i", prot); |
|
1120 } |
|
1121 |
|
1122 TMPXMediaDrmRightsStatus status(EMPXDrmRightsFull); |
|
1123 if( drm->IsSupported( KMPXMediaDrmRightsStatus ) ) |
|
1124 { |
|
1125 status = drm->ValueTObjectL<TMPXMediaDrmRightsStatus>(KMPXMediaDrmRightsStatus); |
|
1126 iMedia->SetTObjectValueL<TInt>(KMPXMediaDrmRightsStatus, status ); |
|
1127 MPX_DEBUG2("CMPXMetadataExtractor::SetDrmMediaPropertiesL -- status %i", status); |
|
1128 } |
|
1129 |
|
1130 // Set DB flags |
|
1131 dbFlags |= KMPXMediaGeneralFlagsIsDrmProtected; |
|
1132 if( status != EMPXDrmRightsFull && status != EMPXDrmRightsRestricted && status != EMPXDrmRightsPreview ) |
|
1133 { |
|
1134 dbFlags |= KMPXMediaGeneralFlagsIsDrmLicenceInvalid; |
|
1135 } |
|
1136 CleanupStack::PopAndDestroy( drm ); |
|
1137 } |
|
1138 |
|
1139 // Trapped PV DRM error. If -46, we know the file has no rights |
|
1140 // |
|
1141 if( drmError == KErrPermissionDenied ) |
|
1142 { |
|
1143 dbFlags |= KMPXMediaGeneralFlagsIsDrmLicenceInvalid; |
|
1144 } |
|
1145 else |
|
1146 { |
|
1147 User::LeaveIfError( drmError ); |
|
1148 } |
|
1149 |
|
1150 iMedia->SetTObjectValueL<TBool>( KMPXMediaDrmProtected, prot ); |
|
1151 iMedia->SetTObjectValueL<TUint16>( KMPXMediaMTPDrmStatus, (TUint16)prot ); |
|
1152 |
|
1153 iDrmMediaUtility->Close(); |
|
1154 |
|
1155 } // DRM file |
|
1156 |
|
1157 |
|
1158 // verify the file open status |
|
1159 if( iFileOpenError == KErrNotFound || iFileOpenError == KErrPathNotFound ) |
|
1160 { |
|
1161 dbFlags |= KMPXMediaGeneralFlagsIsInvalid; |
|
1162 } |
|
1163 |
|
1164 // Finally set the db flag |
|
1165 // |
|
1166 iMedia->SetTObjectValueL( KMPXMediaGeneralFlags, dbFlags ); |
|
1167 |
|
1168 } |