127 // Gets a piece of metadata from the collection |
122 // Gets a piece of metadata from the collection |
128 // --------------------------------------------------------------------------- |
123 // --------------------------------------------------------------------------- |
129 // |
124 // |
130 void CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL( const TUint16 aPropCode, |
125 void CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL( const TUint16 aPropCode, |
131 MMTPType& aNewData, |
126 MMTPType& aNewData, |
132 const CMTPObjectMetaData& aObjectMetaData ) |
127 const TDesC& aFullFileName, |
|
128 TMPXGeneralCategory aCategory ) |
133 { |
129 { |
134 PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL aPropCode = 0x%x" ), aPropCode ); |
130 PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL aPropCode = 0x%x" ), aPropCode ); |
135 |
131 |
136 // File Path |
|
137 HBufC* suid = aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ).AllocLC(); // + suid |
|
138 TUint format = aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode ); |
|
139 TMPXGeneralCategory category = ( format == EMTPFormatCodeAbstractAudioVideoPlaylist ) || |
|
140 ( format == EMTPFormatCodeM3UPlaylist ) ? EMPXPlaylist : EMPXSong; |
|
141 |
|
142 PERFLOGSTART( KMpxCollectionGetL ); |
132 PERFLOGSTART( KMpxCollectionGetL ); |
143 const CMPXMedia& media = CollectionHelperL()->GetL( *suid, category ); |
133 const CMPXMedia& media = CollectionHelperL()->GetL( aFullFileName, aCategory ); |
144 PERFLOGSTOP( KMpxCollectionGetL ); |
134 PERFLOGSTOP( KMpxCollectionGetL ); |
145 |
|
146 CleanupStack::PopAndDestroy( suid ); // - suid |
|
147 |
135 |
148 TMPXAttributeData attrib( MpxAttribFromPropL( aPropCode ) ); |
136 TMPXAttributeData attrib( MpxAttribFromPropL( aPropCode ) ); |
149 TBool isSupported = media.IsSupported( attrib ); |
137 TBool isSupported = media.IsSupported( attrib ); |
150 PRINT1(_L( "MM MTP <> CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL isSupported = %d" ), isSupported); |
138 PRINT1(_L( "MM MTP <> CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL isSupported = %d" ), isSupported ); |
151 |
139 |
152 if ( aPropCode != EMTPObjectPropCodeOriginalReleaseDate |
140 if ( aPropCode != EMTPObjectPropCodeOriginalReleaseDate |
153 && aPropCode != EMTPObjectPropCodeDRMStatus |
141 && aPropCode != EMTPObjectPropCodeDRMStatus |
154 && !isSupported ) |
142 && !isSupported ) |
155 { |
143 { |
600 // Rename the filename onto MPX DB |
588 // Rename the filename onto MPX DB |
601 // ----------------------------------------------------------------------------- |
589 // ----------------------------------------------------------------------------- |
602 // |
590 // |
603 void CMmMtpDpMetadataMpxAccess::RenameObjectL( const TDesC& aOldFileName, |
591 void CMmMtpDpMetadataMpxAccess::RenameObjectL( const TDesC& aOldFileName, |
604 const TDesC& aNewFileName, |
592 const TDesC& aNewFileName, |
605 TUint aFormatCode ) |
593 TMPXGeneralCategory aCategory ) |
606 { |
594 { |
607 PRINT2( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::RenameObjectL aOldFileName = %S, aNewFileName = %S" ), |
595 PRINT2( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::RenameObjectL aOldFileName = %S, aNewFileName = %S" ), |
608 &aOldFileName, |
596 &aOldFileName, |
609 &aNewFileName ); |
597 &aNewFileName ); |
610 |
598 |
611 TInt err = KErrNone; |
599 TInt err = KErrNone; |
612 |
600 TRAP( err, CollectionHelperL()->RenameL( aOldFileName, aNewFileName, aCategory ) ); |
613 if ( ( aFormatCode == EMTPFormatCodeAbstractAudioVideoPlaylist ) |
|
614 || ( aFormatCode == EMTPFormatCodeM3UPlaylist ) ) |
|
615 { |
|
616 PRINT( _L( "MM MTP <> Playlist" ) ); |
|
617 TRAP( err, CollectionHelperL()->RenameL( aOldFileName, aNewFileName, EMPXPlaylist ) ); |
|
618 } |
|
619 else // Not a playlist |
|
620 { |
|
621 PRINT( _L( "MM MTP <> Non-Playlist" ) ); |
|
622 TRAP( err, CollectionHelperL()->RenameL( aOldFileName, aNewFileName, EMPXSong ) ); |
|
623 } |
|
624 |
601 |
625 if ( KErrNotFound == err ) |
602 if ( KErrNotFound == err ) |
626 { |
603 { |
627 PRINT1( _L( "MM MTP <> Not found the %S in the MPX DB" ), &aOldFileName ); |
604 PRINT1( _L( "MM MTP <> Not found the %S in the MPX DB" ), &aOldFileName ); |
628 } |
605 } |
637 // CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL |
614 // CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL |
638 // Updated object metadata in MPX database |
615 // Updated object metadata in MPX database |
639 // ----------------------------------------------------------------------------- |
616 // ----------------------------------------------------------------------------- |
640 void CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL( const TUint16 aPropCode, |
617 void CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL( const TUint16 aPropCode, |
641 const MMTPType& aNewData, |
618 const MMTPType& aNewData, |
642 const TDesC& aSuid ) |
619 const TDesC& aFullFileName, |
643 { |
620 TMPXGeneralCategory aCategory ) |
644 PRINT2( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL aPropCode = 0x%x aSuid = %S" ), |
621 { |
645 aPropCode, |
622 PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL aPropCode = 0x%x" ), aPropCode ); |
646 &aSuid ); |
623 |
647 CMPXMedia* media = NULL; |
|
648 |
|
649 // Creat media properties for the song |
|
650 RArray<TInt> contentIDs; |
624 RArray<TInt> contentIDs; |
651 CleanupClosePushL( contentIDs ); // + contentIDs |
625 CleanupClosePushL( contentIDs ); // + contentIDs |
|
626 |
652 contentIDs.AppendL( KMPXMediaIdGeneral ); |
627 contentIDs.AppendL( KMPXMediaIdGeneral ); |
653 contentIDs.AppendL( KMPXMediaIdAudio ); |
628 |
654 contentIDs.AppendL( KMPXMediaIdMusic ); |
629 if ( aCategory == EMPXSong ) |
655 contentIDs.AppendL( KMPXMediaIdMTP ); |
630 { |
656 |
|
657 media = CMPXMedia::NewL( contentIDs.Array() ); |
|
658 CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs |
|
659 CleanupStack::PushL( media ); // + media |
|
660 |
|
661 media->SetTObjectValueL<TMPXGeneralCategory>( |
|
662 KMPXMediaGeneralCategory, |
|
663 EMPXSong ); |
|
664 |
|
665 // MPXMedia default types |
|
666 media->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType, EMPXItem ); |
|
667 |
|
668 // Get file path |
|
669 TParsePtrC parse( aSuid ); |
|
670 media->SetTextValueL( KMPXMediaGeneralUri, aSuid ); |
|
671 media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); |
|
672 |
|
673 TRAPD( err, SetMetadataValueL( aPropCode, aNewData, *media ) ); |
|
674 |
|
675 if ( err == KErrNone ) |
|
676 { |
|
677 SetStorageRootL( parse.Drive() ); |
|
678 |
|
679 // Update the song's metadata with the media object |
|
680 PERFLOGSTART( KMpxCollectionSetL ); |
|
681 CollectionHelperL()->SetL( media ); |
|
682 PERFLOGSTOP( KMpxCollectionSetL ); |
|
683 } |
|
684 else |
|
685 { |
|
686 PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL ERROR = %d" ), err ); |
|
687 |
|
688 User::Leave( err ); |
|
689 } |
|
690 |
|
691 CleanupStack::PopAndDestroy( media ); // - media |
|
692 PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL" ) ); |
|
693 } |
|
694 |
|
695 // ----------------------------------------------------------------------------- |
|
696 // CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL |
|
697 // Updated object metadata in MPX database |
|
698 // ----------------------------------------------------------------------------- |
|
699 void CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL( const TUint16 aPropCode, |
|
700 const MMTPType& aNewData, |
|
701 const CMTPObjectMetaData& aObjectMetaData ) |
|
702 { |
|
703 PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL aPropCode = 0x%x" ), aPropCode ); |
|
704 CMPXMedia* media = NULL; |
|
705 |
|
706 RArray<TInt> contentIDs; |
|
707 CleanupClosePushL( contentIDs ); // + contentIDs |
|
708 |
|
709 TUint format = aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode ); |
|
710 if ( ( format == EMTPFormatCodeAbstractAudioVideoPlaylist ) |
|
711 || ( format == EMTPFormatCodeM3UPlaylist ) ) |
|
712 { |
|
713 PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL format is abstract media" ) ); |
|
714 contentIDs.AppendL( KMPXMediaIdGeneral ); |
|
715 |
|
716 media = CMPXMedia::NewL( contentIDs.Array() ); |
|
717 CleanupStack::PushL( media ); // + media |
|
718 |
|
719 media->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory, |
|
720 EMPXPlaylist ); |
|
721 } |
|
722 else |
|
723 { |
|
724 // Creat media properties for the song |
|
725 contentIDs.AppendL( KMPXMediaIdGeneral ); |
|
726 contentIDs.AppendL( KMPXMediaIdAudio ); |
631 contentIDs.AppendL( KMPXMediaIdAudio ); |
727 contentIDs.AppendL( KMPXMediaIdMusic ); |
632 contentIDs.AppendL( KMPXMediaIdMusic ); |
728 contentIDs.AppendL( KMPXMediaIdMTP ); |
633 contentIDs.AppendL( KMPXMediaIdMTP ); |
729 |
634 } |
730 media = CMPXMedia::NewL( contentIDs.Array() ); |
635 |
731 CleanupStack::PushL( media ); // + media |
636 CMPXMedia* media = CMPXMedia::NewL( contentIDs.Array() ); |
732 |
637 CleanupStack::PushL( media ); // + media |
733 media->SetTObjectValueL<TMPXGeneralCategory>( |
638 |
734 KMPXMediaGeneralCategory, |
639 media->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory, aCategory ); |
735 EMPXSong ); |
|
736 } |
|
737 |
640 |
738 // MPXMedia default types |
641 // MPXMedia default types |
739 media->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType, EMPXItem ); |
642 media->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType, EMPXItem ); |
740 |
643 |
741 // Get file path |
644 TParsePtrC parse( aFullFileName ); |
742 HBufC* suid = aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ).AllocLC(); // + suid |
645 media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName ); |
743 TParsePtrC parse( *suid ); |
|
744 media->SetTextValueL( KMPXMediaGeneralUri, *suid ); |
|
745 media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); |
646 media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); |
746 CleanupStack::PopAndDestroy( suid ); // - suid |
|
747 |
647 |
748 PERFLOGSTART( KSetMetadataValue ); |
648 PERFLOGSTART( KSetMetadataValue ); |
749 SetMetadataValueL( aPropCode, aNewData, *media ); |
649 SetMetadataValueL( aPropCode, aNewData, *media ); |
750 PERFLOGSTOP( KSetMetadataValue ); |
650 PERFLOGSTOP( KSetMetadataValue ); |
751 |
651 |
949 aMediaProp.SetTObjectValueL<TUint16>( attrib, uint16Data.Value() ); |
849 aMediaProp.SetTObjectValueL<TUint16>( attrib, uint16Data.Value() ); |
950 PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL DRM Status uint16 value = %u" ), uint16Data.Value() ); |
850 PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL DRM Status uint16 value = %u" ), uint16Data.Value() ); |
951 } |
851 } |
952 break; |
852 break; |
953 |
853 |
|
854 case EMTPObjectPropCodeRepresentativeSampleData: |
|
855 { |
|
856 const CMTPTypeArray& mtpTypeArray = static_cast<const CMTPTypeArray&>( aNewData ); |
|
857 TUint32 numElements = mtpTypeArray.NumElements(); |
|
858 const TDesC& suid = aMediaProp.ValueText( KMPXMediaGeneralUri ); |
|
859 PRINT2( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData numElements = %d, suid = %S" ), numElements, &suid ); |
|
860 |
|
861 HBufC8* sampleData = HBufC8::NewLC( numElements * sizeof( TUint8 ) ); |
|
862 TPtr8 samplePtr = sampleData->Des(); |
|
863 mtpTypeArray.ToDes( samplePtr ); |
|
864 RFile sampleFile; |
|
865 CleanupClosePushL( sampleFile ); |
|
866 User::LeaveIfError( sampleFile.Replace( iRfs, suid, EFileWrite ) ); |
|
867 User::LeaveIfError( sampleFile.Write( samplePtr ) ); |
|
868 CleanupStack::PopAndDestroy( &sampleFile ); |
|
869 CleanupStack::PopAndDestroy( sampleData ); |
|
870 aMediaProp.SetTObjectValueL<TBool>( attrib, ETrue ); |
|
871 PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData is ready = %u" ), 1 ); |
|
872 } |
|
873 break; |
|
874 |
954 default: |
875 default: |
955 { |
876 { |
956 User::Leave( KErrNotSupported ); |
877 User::Leave( KErrNotSupported ); |
957 } |
878 } |
958 break; |
879 break; |
1154 media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName ); |
1075 media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName ); |
1155 |
1076 |
1156 TParsePtrC parse( aFullFileName ); |
1077 TParsePtrC parse( aFullFileName ); |
1157 |
1078 |
1158 media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); |
1079 media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); |
1159 if ( aCategory == EMPXPlaylist ) |
1080 if ( ( aCategory == EMPXPlaylist ) || ( aCategory == EMPXAbstractAlbum ) ) |
1160 { |
1081 { |
1161 media->SetTextValueL( KMPXMediaGeneralTitle, parse.Name() ); |
1082 media->SetTextValueL( KMPXMediaGeneralTitle, parse.Name() ); |
1162 } |
1083 } |
1163 media->SetTObjectValueL<TBool>( KMPXMediaGeneralSynchronized, ETrue ); |
1084 media->SetTObjectValueL<TBool>( KMPXMediaGeneralSynchronized, ETrue ); |
1164 media->SetCObjectValueL( KMPXMediaArrayContents, abstractMediaArray ); |
1085 media->SetCObjectValueL( KMPXMediaArrayContents, abstractMediaArray ); |
1165 media->SetTObjectValueL( KMPXMediaArrayCount, abstractMediaArray->Count() ); |
1086 media->SetTObjectValueL( KMPXMediaArrayCount, abstractMediaArray->Count() ); |
|
1087 if ( aCategory == EMPXAbstractAlbum ) |
|
1088 { |
|
1089 media->SetTObjectValueL( KMPXMediaMTPSampleDataFlag, EFalse ); |
|
1090 } |
1166 |
1091 |
1167 PERFLOGSTART( KMpxCollectionAddL ); |
1092 PERFLOGSTART( KMpxCollectionAddL ); |
1168 CollectionHelperL()->AddL( media ); |
1093 CollectionHelperL()->AddL( media ); |
1169 PERFLOGSTOP( KMpxCollectionAddL ); |
1094 PERFLOGSTOP( KMpxCollectionAddL ); |
1170 |
1095 |
1178 |
1103 |
1179 PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::AddAbstractMediaL" ) ); |
1104 PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::AddAbstractMediaL" ) ); |
1180 } |
1105 } |
1181 |
1106 |
1182 // ----------------------------------------------------------------------------- |
1107 // ----------------------------------------------------------------------------- |
1183 // CMmMtpDpMetadataMpxAccess::SetAbstractMediaL |
1108 // CMmMtpDpMetadataMpxAccess::SetReferenceL |
1184 // Set abstract media to DB |
1109 // Set abstract media to DB |
1185 // ----------------------------------------------------------------------------- |
1110 // ----------------------------------------------------------------------------- |
1186 // |
1111 // |
1187 void CMmMtpDpMetadataMpxAccess::SetAbstractMediaL( const TDesC& aAbstractMediaFileName, |
1112 void CMmMtpDpMetadataMpxAccess::SetReferenceL( const TDesC& aRefOwnerName, |
1188 CDesCArray& aRefFileArray, TMPXGeneralCategory aCategory ) |
1113 CDesCArray& aRefFileArray, |
1189 { |
1114 TMPXGeneralCategory aCategory ) |
1190 PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetAbstractMediaL" ) ); |
1115 { |
|
1116 PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetReferenceL" ) ); |
1191 CMPXMediaArray* abstractMediaArray = CMPXMediaArray::NewL(); |
1117 CMPXMediaArray* abstractMediaArray = CMPXMediaArray::NewL(); |
1192 CleanupStack::PushL( abstractMediaArray ); // + abstractMediaArray |
1118 CleanupStack::PushL( abstractMediaArray ); // + abstractMediaArray |
1193 |
1119 |
1194 TUint count = aRefFileArray.Count(); |
1120 TUint count = aRefFileArray.Count(); |
1195 for ( TUint j = 0; j < count; j++ ) |
1121 for ( TUint j = 0; j < count; j++ ) |
1196 { |
1122 { |
1197 // if the file is video, skip it and continue |
|
1198 if ( MmMtpDpUtility::IsVideoL( aRefFileArray[j], iFramework ) ) |
|
1199 { |
|
1200 continue; |
|
1201 } |
|
1202 |
|
1203 // Creat media properties for the song |
1123 // Creat media properties for the song |
1204 RArray<TInt> contentIDs; |
1124 RArray<TInt> contentIDs; |
1205 CleanupClosePushL( contentIDs ); // + contentIDs |
1125 CleanupClosePushL( contentIDs ); // + contentIDs |
1206 contentIDs.AppendL( KMPXMediaIdGeneral ); |
1126 contentIDs.AppendL( KMPXMediaIdGeneral ); |
1207 contentIDs.AppendL( KMPXMediaIdAudio ); |
1127 contentIDs.AppendL( KMPXMediaIdAudio ); |
1236 CMPXMedia* abstractMedia = CMPXMedia::NewL( contentIDs.Array() ); |
1156 CMPXMedia* abstractMedia = CMPXMedia::NewL( contentIDs.Array() ); |
1237 CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs |
1157 CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs |
1238 CleanupStack::PushL( abstractMedia ); // + abstractMedia |
1158 CleanupStack::PushL( abstractMedia ); // + abstractMedia |
1239 |
1159 |
1240 abstractMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); |
1160 abstractMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); |
1241 |
|
1242 abstractMedia->SetTObjectValueL( KMPXMediaGeneralCategory, aCategory ); |
1161 abstractMedia->SetTObjectValueL( KMPXMediaGeneralCategory, aCategory ); |
1243 |
1162 abstractMedia->SetTextValueL( KMPXMediaGeneralUri, aRefOwnerName ); |
1244 abstractMedia->SetTextValueL( KMPXMediaGeneralUri, aAbstractMediaFileName ); |
1163 TParsePtrC parse( aRefOwnerName ); |
1245 |
|
1246 TParsePtrC parse( aAbstractMediaFileName ); |
|
1247 abstractMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); |
1164 abstractMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); |
1248 abstractMedia->SetTObjectValueL<TBool>( KMPXMediaGeneralSynchronized, |
1165 abstractMedia->SetTObjectValueL<TBool>( KMPXMediaGeneralSynchronized, |
1249 ETrue ); |
1166 ETrue ); |
1250 abstractMedia->SetCObjectValueL( KMPXMediaArrayContents, abstractMediaArray ); |
1167 abstractMedia->SetCObjectValueL( KMPXMediaArrayContents, abstractMediaArray ); |
1251 abstractMedia->SetTObjectValueL( KMPXMediaArrayCount, |
1168 abstractMedia->SetTObjectValueL( KMPXMediaArrayCount, |
1355 { EMTPObjectPropCodeDescription, KMPXMediaGeneralComment }, |
1270 { EMTPObjectPropCodeDescription, KMPXMediaGeneralComment }, |
1356 { EMTPObjectPropCodeNumberOfChannels, KMPXMediaAudioNumberOfChannels }, |
1271 { EMTPObjectPropCodeNumberOfChannels, KMPXMediaAudioNumberOfChannels }, |
1357 { EMTPObjectPropCodeAudioBitRate, KMPXMediaAudioBitrate }, |
1272 { EMTPObjectPropCodeAudioBitRate, KMPXMediaAudioBitrate }, |
1358 { EMTPObjectPropCodeSampleRate, KMPXMediaAudioSamplerate }, |
1273 { EMTPObjectPropCodeSampleRate, KMPXMediaAudioSamplerate }, |
1359 { EMTPObjectPropCodeAudioWAVECodec, KMPXMediaAudioAudioCodec }, |
1274 { EMTPObjectPropCodeAudioWAVECodec, KMPXMediaAudioAudioCodec }, |
1360 { EMTPObjectPropCodeAlbumArtist, KMPXMediaMusicArtist } |
1275 { EMTPObjectPropCodeAlbumArtist, KMPXMediaMusicAlbumArtist }, |
|
1276 { EMTPObjectPropCodeRepresentativeSampleData,KMPXMediaMTPSampleDataFlag } |
1361 }; |
1277 }; |
1362 |
1278 |
1363 TInt i = 0; |
1279 TInt i = 0; |
1364 TInt count = sizeof( KMetadataTable ) / sizeof( KMetadataTable[0] ); |
1280 TInt count = sizeof( KMetadataTable ) / sizeof( KMetadataTable[0] ); |
1365 while ( ( KMetadataTable[i].iPropCode != aPropCode ) |
1281 while ( ( KMetadataTable[i].iPropCode != aPropCode ) |