mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataproviderdescriptionutility.cpp
changeset 32 edd273b3192a
parent 25 d881023c13eb
child 40 4a1905d205a2
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataproviderdescriptionutility.cpp	Fri May 14 16:21:14 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataproviderdescriptionutility.cpp	Thu May 27 13:19:19 2010 +0300
@@ -84,28 +84,125 @@
         }
 
     CMTPTypeInterdependentPropDesc* interdependentPropDesc = CMTPTypeInterdependentPropDesc::NewL();
+    CleanupStack::PushL( interdependentPropDesc );  // + interdependentPropDesc
 
     if ( audioWaveCodecSupported && audioBitRateSupported )
         {
-        CMTPTypeInterdependentProperties* properties = CMTPTypeInterdependentProperties::NewL();
-        properties->AppendL( NewAudioWaveCodecPropDescL( aFormatCode ) );
-        properties->AppendL( NewAudioBitratePropDescL( aFormatCode ) );
-        interdependentPropDesc->AppendL( properties );
+        if ( ( aFormatCode == EMTPFormatCodeWMA )
+            || ( aFormatCode == EMTPFormatCodeWMV )
+            || ( aFormatCode == EMTPFormatCodeASF ) )
+            {
+            AppendWMAudioInterdepentPropDescL( interdependentPropDesc );
+            }
+        else
+            {
+            CMTPTypeInterdependentProperties* properties = CMTPTypeInterdependentProperties::NewL();
+            CleanupStack::PushL( properties );
+
+            CMTPTypeObjectPropDesc* propertyDesc1 = NewAudioWaveCodecPropDescL( aFormatCode );
+            CleanupStack::PushL( propertyDesc1 );   // + propertyDesc1
+            properties->AppendL( propertyDesc1 );
+            CleanupStack::Pop( propertyDesc1 ); // - propertyDesc1
+
+            CMTPTypeObjectPropDesc* propertyDesc2 = NewAudioBitratePropDescL( aFormatCode );
+            CleanupStack::PushL( propertyDesc2 );   // + propertyDesc2
+            properties->AppendL( propertyDesc2 );
+            CleanupStack::Pop( propertyDesc2 ); // - propertyDesc2
+
+            interdependentPropDesc->AppendL( properties );
+            CleanupStack::Pop( properties );
+            }
         }
 
     if ( videoFourCcCodecSupported && videoBitRateSupported )
         {
         CMTPTypeInterdependentProperties* properties = CMTPTypeInterdependentProperties::NewL();
-        properties->AppendL( NewVideoFourCCCodecPropDescL( aFormatCode ) );
-        properties->AppendL( NewVideoBitratePropDescL( aFormatCode ) );
+        CleanupStack::PushL( properties );  // + properties
+
+        CMTPTypeObjectPropDesc* propertyDesc1 = NewVideoFourCCCodecPropDescL( aFormatCode );
+        CleanupStack::PushL( propertyDesc1 );   // + propertyDesc1
+        properties->AppendL( propertyDesc1 );
+        CleanupStack::Pop( propertyDesc1 ); // - propertyDesc1
+
+        CMTPTypeObjectPropDesc* propertyDesc2 = NewVideoBitratePropDescL( aFormatCode );
+        CleanupStack::PushL( propertyDesc2 );   // + propertyDesc2
+        properties->AppendL( propertyDesc2 );
+        CleanupStack::Pop( propertyDesc2 ); // - propertyDesc2
+
         interdependentPropDesc->AppendL( properties );
+        CleanupStack::Pop( properties );    // - properties
         }
 
     PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewInterdepentPropDescL" ) );
+    CleanupStack::Pop( interdependentPropDesc );  // - interdependentPropDesc
     return interdependentPropDesc;
     }
 
 // -----------------------------------------------------------------------------
+// CMediaMtpDataProviderDescriptionUtility::NewWMAudioInterdepentPropDescL
+// Append WM Audio specific to interdpendent property description.
+// -----------------------------------------------------------------------------
+//
+void CMediaMtpDataProviderDescriptionUtility::AppendWMAudioInterdepentPropDescL(CMTPTypeInterdependentPropDesc* aInterdependentPropDesc)
+    {
+    PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::AppendWMAudioInterdepentPropDescL" ) );
+
+    CMTPTypeInterdependentProperties* properties1 = CMTPTypeInterdependentProperties::NewL();
+    CleanupStack::PushL( properties1 ); // + properties1
+
+    CMTPTypeObjectPropDescEnumerationForm* form = CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT32 );
+    CleanupStack::PushL( form ); // + form
+    form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecWMA ) );
+
+    CMTPTypeObjectPropDesc* propertyDesc1 = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeAudioWAVECodec, *form );
+
+    CleanupStack::PopAndDestroy( form ); // - form
+    CleanupStack::PushL( propertyDesc1 ); // + propertyDesc1
+    properties1->AppendL( propertyDesc1 );
+    CleanupStack::Pop( propertyDesc1 ); // - propertyDesc1
+
+    CMTPTypeObjectPropDesc* propertyDesc2 = NewRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
+                                                        EMTPWMAMinBitrate,
+                                                        EMTPWMAMaxBitrate,
+                                                        EMTPAudioBitrateStep );
+
+    CleanupStack::PushL( propertyDesc2 ); // + propertyDesc2
+    properties1->AppendL( propertyDesc2 );
+    CleanupStack::Pop( propertyDesc2 ); // - propertyDesc2
+
+    aInterdependentPropDesc->AppendL( properties1 );
+    CleanupStack::Pop( properties1 ); // - properties1
+
+    CMTPTypeInterdependentProperties* properties2 = CMTPTypeInterdependentProperties::NewL();
+    CleanupStack::PushL( properties2 ); // + properties2
+
+    form = CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT32 );
+    CleanupStack::PushL( form ); // + form
+    form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecWMAPro ) );
+
+    CMTPTypeObjectPropDesc* propertyDesc3 = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeAudioWAVECodec, *form );
+
+    CleanupStack::PopAndDestroy( form ); // - form
+    CleanupStack::PushL( propertyDesc3 ); // + propertyDesc3
+    properties2->AppendL( propertyDesc3 );
+    CleanupStack::Pop( propertyDesc3 ); // - propertyDesc3
+
+    CMTPTypeObjectPropDesc* propertyDesc4 = NewRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
+                                                        EMTPWMAProMinBitrate,
+                                                        EMTPWMAProMaxBitrate,
+                                                        EMTPAudioBitrateStep );
+
+    CleanupStack::PushL( propertyDesc4 ); // + propertyDesc4
+    properties2->AppendL( propertyDesc4 );
+    CleanupStack::Pop( propertyDesc4 ); // - propertyDesc4
+
+    aInterdependentPropDesc->AppendL( properties2 );
+    CleanupStack::Pop( properties2 ); // - properties2
+
+    PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::AppendWMAudioInterdepentPropDescL" ) );
+    }
+
+// -----------------------------------------------------------------------------
 // CMediaMtpDataProviderDescriptionUtility::NewSpecificPropDescL
 // Construct media dp specific property description.
 // -----------------------------------------------------------------------------
@@ -236,6 +333,7 @@
         case EMTPFormatCodeWMV:
         case EMTPFormatCodeASF:
             form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecWMA ) );
+            form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecWMAPro ) );
             break;
 
         case EMTPFormatCodeMP3:
@@ -281,7 +379,7 @@
         case EMTPFormatCodeASF:
             propertyDesc = NewRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
                 EMTPWMAMinBitrate,
-                EMTPWMAMaxBitrate,
+                EMTPWMAProMaxBitrate,
                 EMTPAudioBitrateStep );
             break;
 
@@ -383,7 +481,7 @@
             ETrue );
         }
 
-    PRINT( _L( "MM MTP <= MmMtpDpDescriptionUtiliNewviceVideoBitratePropDescL" ) );
+    PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewVideoBitratePropDescL" ) );
 
     return propertyDesc;
     }