mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetobjectpropdesc.cpp
changeset 0 a2952bb97e68
equal deleted inserted replaced
-1:000000000000 0:a2952bb97e68
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Implement the operation: GetObjectPropDesc
       
    15 *
       
    16 */
       
    17 
       
    18 #include <mtp/cmtptypeobjectpropdesc.h>
       
    19 #include <mtp/mtpprotocolconstants.h>
       
    20 #include <mtp/cmtptypestring.h>
       
    21 
       
    22 #include "cmediamtpdataprovidergetobjectpropdesc.h"
       
    23 #include "mediamtpdataproviderconst.h"
       
    24 #include "mmmtpdplogger.h"
       
    25 #include "mmmtpdpdefs.h"
       
    26 
       
    27 const TUint32 KMTPDescriptionLen = 0x00000200;
       
    28 
       
    29 // -----------------------------------------------------------------------------
       
    30 // CMediaMtpDataProviderGetObjectPropDesc::NewL
       
    31 // Two-phase construction method
       
    32 // -----------------------------------------------------------------------------
       
    33 //
       
    34 MMmRequestProcessor* CMediaMtpDataProviderGetObjectPropDesc::NewL( MMTPDataProviderFramework& aFramework,
       
    35     MMTPConnection& aConnection,
       
    36     MMmMtpDpConfig& aDpConfig )
       
    37     {
       
    38     CMediaMtpDataProviderGetObjectPropDesc* self =
       
    39         new ( ELeave ) CMediaMtpDataProviderGetObjectPropDesc( aFramework,
       
    40             aConnection,
       
    41             aDpConfig );
       
    42     CleanupStack::PushL( self );
       
    43     self->ConstructL();
       
    44     CleanupStack::Pop( self );
       
    45     return self;
       
    46     }
       
    47 
       
    48 // -----------------------------------------------------------------------------
       
    49 // CMediaMtpDataProviderGetObjectPropDesc::ConstructL
       
    50 // Two-phase construction method
       
    51 // -----------------------------------------------------------------------------
       
    52 //
       
    53 void CMediaMtpDataProviderGetObjectPropDesc::ConstructL()
       
    54     {
       
    55     CGetObjectPropDesc::ConstructL();
       
    56     }
       
    57 
       
    58 // -----------------------------------------------------------------------------
       
    59 // CMediaMtpDataProviderGetObjectPropDesc::~CMediaMtpDataProviderGetObjectPropDesc
       
    60 // Destructor
       
    61 // -----------------------------------------------------------------------------
       
    62 //
       
    63 CMediaMtpDataProviderGetObjectPropDesc::~CMediaMtpDataProviderGetObjectPropDesc()
       
    64     {
       
    65 
       
    66     }
       
    67 
       
    68 // -----------------------------------------------------------------------------
       
    69 // CMediaMtpDataProviderGetObjectPropDesc::CMediaMtpDataProviderGetObjectPropDesc
       
    70 // Standard c++ constructor
       
    71 // -----------------------------------------------------------------------------
       
    72 //
       
    73 CMediaMtpDataProviderGetObjectPropDesc::CMediaMtpDataProviderGetObjectPropDesc( MMTPDataProviderFramework& aFramework,
       
    74     MMTPConnection& aConnection,
       
    75     MMmMtpDpConfig& aDpConfig ) :
       
    76     CGetObjectPropDesc( aFramework, aConnection, aDpConfig )
       
    77     {
       
    78 
       
    79     }
       
    80 
       
    81 void CMediaMtpDataProviderGetObjectPropDesc::ServiceSpecificObjectPropertyL(TUint16 aPropCode)
       
    82     {
       
    83     switch (aPropCode)
       
    84         {
       
    85         // format specific
       
    86         case EMTPObjectPropCodeArtist: // Artist
       
    87         case EMTPObjectPropCodeTrack: // Track
       
    88         case EMTPObjectPropCodeGenre: // Genre
       
    89         case EMTPObjectPropCodeUseCount: // Use Count
       
    90         case EMTPObjectPropCodeAlbumName: // Album Name
       
    91         case EMTPObjectPropCodeAlbumArtist: // Album Artist
       
    92         case EMTPObjectPropCodeOriginalReleaseDate: // Original Release Date
       
    93         case EMTPObjectPropCodeComposer: // Composer
       
    94         case EMTPObjectPropCodeParentalRating:
       
    95             iObjectProperty = CMTPTypeObjectPropDesc::NewL( aPropCode );
       
    96             break;
       
    97 
       
    98         // Number of Channels (m)
       
    99         case EMTPObjectPropCodeNumberOfChannels:
       
   100             ServiceNumberOfChannelsL();
       
   101             break;
       
   102 
       
   103         // Sample Rate (HAS MINIMUM AND MAX VALUE)
       
   104         case EMTPObjectPropCodeSampleRate:
       
   105             ServiceCodeSampleRateL();
       
   106             break;
       
   107 
       
   108         // Audio Wave Codec (MAY REQUIRED LIMITED NUMBER TO BE PRODUCED)
       
   109         case EMTPObjectPropCodeAudioWAVECodec:
       
   110             ServiceCodeWaveCodecL();
       
   111             break;
       
   112 
       
   113         // Audio Bit Rate (MAY REQUIRED LIMITED NUMBER TO BE PRODUCED)
       
   114         case EMTPObjectPropCodeAudioBitRate:
       
   115             ServiceCodeAudioBitrateL();
       
   116             break;
       
   117 
       
   118         // Duration
       
   119         case EMTPObjectPropCodeDuration:
       
   120             ServiceDurationL();
       
   121             break;
       
   122 
       
   123         // Description
       
   124         case EMTPObjectPropCodeDescription:
       
   125             ServiceDescriptionL();
       
   126             break;
       
   127 
       
   128         case EMTPObjectPropCodeWidth:
       
   129             ServiceRangeFormDescriptionL( aPropCode,
       
   130                 EMTPMinWidth,
       
   131                 EMTPMaxWidth,
       
   132                 EMTPStepWidth );
       
   133             break;
       
   134 
       
   135         case EMTPObjectPropCodeHeight:
       
   136             ServiceRangeFormDescriptionL( aPropCode,
       
   137                 EMTPMinHeight,
       
   138                 EMTPMaxHeight,
       
   139                 EMTPStepHeight );
       
   140             break;
       
   141 
       
   142         case EMTPObjectPropCodeScanType:
       
   143             ServiceScanTypeDescriptionL();
       
   144             break;
       
   145 
       
   146         case EMTPObjectPropCodeVideoFourCCCodec:
       
   147             ServiceVideoFourCCCodecL();
       
   148             break;
       
   149 
       
   150         case EMTPObjectPropCodeVideoBitRate:
       
   151             ServiceRangeFormDescriptionL( aPropCode,
       
   152                 EMTPWMVMinBitrate,
       
   153                 EMTPWMVMaxBitrate,
       
   154                 EMTPVideoBitrateStep,
       
   155                 ETrue );
       
   156             break;
       
   157 
       
   158         case EMTPObjectPropCodeFramesPerThousandSeconds:
       
   159             ServiceRangeFormDescriptionL( aPropCode,
       
   160                 EMTPMinFramesPerThousandSeconds,
       
   161                 EMTPMaxFramesPerThousandSeconds,
       
   162                 EMTPStepFramesPerThousandSeconds );
       
   163             break;
       
   164 
       
   165         case EMTPObjectPropCodeKeyFrameDistance:
       
   166             ServiceRangeFormDescriptionL( aPropCode,
       
   167                 EMTPMinKeyFrameDistance,
       
   168                 EMTPMaxKeyFrameDistance,
       
   169                 EMTPStepKeyFrameDistance );
       
   170             break;
       
   171 
       
   172         case EMTPObjectPropCodeEncodingProfile:
       
   173             ServiceEncodingProfileDescriptionL();
       
   174             break;
       
   175 
       
   176         case EMTPObjectPropCodeDRMStatus:
       
   177             ServiceDRMStatusL();
       
   178             break;
       
   179 
       
   180         case EMTPExtObjectPropCodeOmaDrmStatus:
       
   181             ServiceOMADRMStatusL();
       
   182             break;
       
   183 
       
   184         default:
       
   185             User::Leave( KErrNotSupported );
       
   186             break;
       
   187         }
       
   188     }
       
   189 
       
   190 // -----------------------------------------------------------------------------
       
   191 // CMediaMtpDataProviderGetObjectPropDesc::ServiceDescriptionL()
       
   192 // Create Description and create new ObjectPropDesc
       
   193 // -----------------------------------------------------------------------------
       
   194 //
       
   195 void CMediaMtpDataProviderGetObjectPropDesc::ServiceDescriptionL()
       
   196     {
       
   197     TMTPTypeUint32 uint32Data( KMTPDescriptionLen );
       
   198 
       
   199     // Althrough iObjectProperty is released in ServiceL(),
       
   200     // release it here maybe a more safer way
       
   201     if ( iObjectProperty != NULL )
       
   202         {
       
   203         delete iObjectProperty;
       
   204         iObjectProperty = NULL;
       
   205         }
       
   206 
       
   207     iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDescription,
       
   208         CMTPTypeObjectPropDesc::ELongStringForm,
       
   209         &uint32Data );
       
   210     }
       
   211 
       
   212 // -----------------------------------------------------------------------------
       
   213 // CMediaMtpDataProviderGetObjectPropDesc::ServiceNumberOfChannelsL
       
   214 // Create list of possible Channel numbers and create new ObjectPropDesc
       
   215 // -----------------------------------------------------------------------------
       
   216 //
       
   217 void CMediaMtpDataProviderGetObjectPropDesc::ServiceNumberOfChannelsL()
       
   218     {
       
   219     PRINT( _L( "MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL" ) );
       
   220 
       
   221     CMTPTypeObjectPropDescEnumerationForm* expectedForm = CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT16 );
       
   222     CleanupStack::PushL( expectedForm ); // + expectedForm
       
   223 
       
   224     TUint16 values[] =
       
   225         {
       
   226         EMTPChannelMono,
       
   227         EMTPChannelStereo
       
   228         };
       
   229 
       
   230     TInt numValues =  sizeof ( values ) / sizeof ( values[0] ) ;
       
   231 
       
   232     for ( TInt i = 0; i < numValues; i++ )
       
   233         {
       
   234         TMTPTypeUint16 data( values[i] );
       
   235         expectedForm->AppendSupportedValueL( data );
       
   236         }
       
   237 
       
   238     // Althrough iObjectProperty is released in ServiceL(),
       
   239     // release it here maybe a more safer way :)
       
   240     if ( iObjectProperty != NULL )
       
   241         {
       
   242         delete iObjectProperty;
       
   243         iObjectProperty = NULL;
       
   244         }
       
   245 
       
   246     iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeNumberOfChannels, *expectedForm );
       
   247     CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
       
   248 
       
   249     PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL" ) );
       
   250     }
       
   251 
       
   252 // -----------------------------------------------------------------------------
       
   253 // CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL
       
   254 // Create list of possible Sample rate list and create new ObjectPropDesc
       
   255 // -----------------------------------------------------------------------------
       
   256 //
       
   257 void CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL()
       
   258     {
       
   259     // if some format does not support the sample rate,
       
   260     // here still need an instance of CMTPTypeObjectPropDesc.
       
   261     PRINT( _L( "MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL" ) );
       
   262 
       
   263     CMTPTypeObjectPropDescEnumerationForm* expectedForm =
       
   264         CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); // + expectedForm
       
   265 
       
   266     TUint32 values[] =
       
   267         {
       
   268         EMTPSampleRate8K ,
       
   269         EMTPSampleRate16K,
       
   270         EMTPSampleRate22_05K,
       
   271         EMTPSampleRate24K,
       
   272         EMTPSampleRate32K,
       
   273         EMTPSampleRate44_1K,
       
   274         EMTPSampleRate48K
       
   275         };
       
   276 
       
   277     TInt numValues = sizeof( values ) / sizeof( values[0] ) ;
       
   278 
       
   279     for ( TInt i = 0; i < numValues; i++ )
       
   280         {
       
   281         TMTPTypeUint32 data( values[i] );
       
   282         expectedForm->AppendSupportedValueL( data );
       
   283         }
       
   284 
       
   285     // Althrough iObjectProperty is released in ServiceL(),
       
   286     // release it here maybe a more safer way :)
       
   287     if ( iObjectProperty != NULL )
       
   288         {
       
   289         delete iObjectProperty;
       
   290         iObjectProperty = NULL;
       
   291         }
       
   292 
       
   293     iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeSampleRate, CMTPTypeObjectPropDesc::EEnumerationForm, expectedForm );
       
   294     CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
       
   295 
       
   296     PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL" ) );
       
   297     }
       
   298 
       
   299 // -----------------------------------------------------------------------------
       
   300 // CMediaMtpDataProviderGetObjectPropDesc::ServiceWaveCodecL
       
   301 // Create list of possible bitrate types and create new ObjectPropDesc
       
   302 // -----------------------------------------------------------------------------
       
   303 //
       
   304 void CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL()
       
   305     {
       
   306     PRINT1( _L( "MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL, format = 0x%x" ), iFormatCode );
       
   307 
       
   308     CMTPTypeObjectPropDescEnumerationForm* form =
       
   309     CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); // + form
       
   310 
       
   311     switch (iFormatCode)
       
   312         {
       
   313         case EMTPFormatCodeWMA:
       
   314         case EMTPFormatCodeWMV:
       
   315         case EMTPFormatCodeASF:
       
   316             {
       
   317             PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL format = 0x%x" ), iFormatCode );
       
   318             TMTPTypeUint32 data( EMTPAudioWAVECodecWMA );
       
   319             form->AppendSupportedValueL( data );
       
   320             }
       
   321             break;
       
   322 
       
   323         case EMTPFormatCodeMP3:
       
   324             {
       
   325             PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL format = 0x%x" ), iFormatCode );
       
   326             TMTPTypeUint32 data( EMTPAudioWAVECodecMP3 );
       
   327             form->AppendSupportedValueL( data );
       
   328             }
       
   329             break;
       
   330 
       
   331         case EMTPFormatCodeMP4Container:
       
   332         case EMTPFormatCode3GPContainer:
       
   333         case EMTPFormatCodeAAC:
       
   334             {
       
   335             PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL format = 0x%x" ), iFormatCode );
       
   336             TMTPTypeUint32 data( EMTPAudioWAVECodecAAC );
       
   337             form->AppendSupportedValueL( data );
       
   338             }
       
   339             break;
       
   340 
       
   341         case EMTPFormatCodeWAV:
       
   342             {
       
   343             PRINT1( _L("MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL format = 0x%x"), iFormatCode );
       
   344             TMTPTypeUint32 data( EMTPAudioWAVECodecPCM );
       
   345             form->AppendSupportedValueL( data );
       
   346             }
       
   347             break;
       
   348 
       
   349         default:
       
   350             {
       
   351             PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL leave because of invalid formatcode = 0x%x" ), iFormatCode );
       
   352             User::Leave(KErrNotSupported);
       
   353             }
       
   354             break;
       
   355         }
       
   356 
       
   357     // Althrough iObjectProperty is released in ServiceL(),
       
   358     // release it here maybe a more safer way :)
       
   359     if ( iObjectProperty != NULL )
       
   360         {
       
   361         delete iObjectProperty;
       
   362         iObjectProperty = NULL;
       
   363         }
       
   364 
       
   365     iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeAudioWAVECodec, *form );
       
   366     CleanupStack::PopAndDestroy( form ); // - form
       
   367 
       
   368     PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL" ) );
       
   369     }
       
   370 
       
   371 void CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeAudioBitrateL()
       
   372     {
       
   373     PRINT1( _L("MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeAudioBitrate, format = 0x%x"), iFormatCode );
       
   374 
       
   375     switch (iFormatCode)
       
   376         {
       
   377         case EMTPFormatCodeWMA:
       
   378         case EMTPFormatCodeWMV:
       
   379         case EMTPFormatCodeASF:
       
   380             {
       
   381             ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
       
   382                 EMTPWMAMinBitrate,
       
   383                 EMTPWMAMaxBitrate,
       
   384                 EMTPAudioBitrateStep );
       
   385             }
       
   386             break;
       
   387 
       
   388         case EMTPFormatCodeMP3:
       
   389             {
       
   390             ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
       
   391                 EMTPMP3MinBitrate,
       
   392                 EMTPMP3MaxBitrate,
       
   393                 EMTPAudioBitrateStep );
       
   394             }
       
   395             break;
       
   396 
       
   397         case EMTPFormatCodeAAC:
       
   398             {
       
   399             ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
       
   400                 EMTPAACMinBitrate,
       
   401                 EMTPAACMaxBitrate,
       
   402                 EMTPAudioBitrateStep );
       
   403             }
       
   404             break;
       
   405 
       
   406         case EMTPFormatCodeWAV:
       
   407             {
       
   408             ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
       
   409                 EMTPPCMMinBitrate,
       
   410                 EMTPPCMMaxBitrate,
       
   411                 EMTPAudioBitrateStep );
       
   412             }
       
   413             break;
       
   414 
       
   415         case EMTPFormatCodeMP4Container:
       
   416         case EMTPFormatCode3GPContainer:
       
   417             {
       
   418             ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
       
   419                 EMTPAACPlusMinBitrate,
       
   420                 EMTPAACPlusMaxBitrate,
       
   421                 EMTPAudioBitrateStep );
       
   422             }
       
   423             break;
       
   424 
       
   425         default:
       
   426             {
       
   427             PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeAudioBitRateL leave because of invalid formatcode = 0x%x" ), iFormatCode );
       
   428             User::Leave( KErrNotSupported );
       
   429             }
       
   430         }
       
   431 
       
   432     PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeAudioBitRateL" ) );
       
   433     }
       
   434 
       
   435 // -----------------------------------------------------------------------------
       
   436 // CGetObjectPropDesc::ServiceDurationL()
       
   437 // Create list of Duration types and create new ObjectPropDesc
       
   438 // -----------------------------------------------------------------------------
       
   439 //
       
   440 void CMediaMtpDataProviderGetObjectPropDesc::ServiceDurationL()
       
   441     {
       
   442 
       
   443     PRINT( _L( "MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceDurationL" ) );
       
   444 
       
   445     CMTPTypeObjectPropDescRangeForm* form = CMTPTypeObjectPropDescRangeForm::NewLC( EMTPTypeUINT32 ); // + form
       
   446 
       
   447     // Set expected values
       
   448     form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMinimumValue, EMTPMinDuration );
       
   449     form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMaximumValue, EMTPMaxDuration );
       
   450     form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EStepSize, EMTPDurationStep );
       
   451 
       
   452     // Althrough iObjectProperty is released in ServiceL(),
       
   453     // release it here maybe a more safer way
       
   454     if ( iObjectProperty != NULL )
       
   455         {
       
   456         delete iObjectProperty;
       
   457         iObjectProperty = NULL;
       
   458         }
       
   459 
       
   460     iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDuration, *form );
       
   461     CleanupStack::PopAndDestroy( form ); // - form
       
   462 
       
   463     PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceDurationL" ) );
       
   464     }
       
   465 
       
   466 void CMediaMtpDataProviderGetObjectPropDesc::ServiceScanTypeDescriptionL()
       
   467     {
       
   468     CMTPTypeObjectPropDescEnumerationForm* expectedForm =
       
   469         CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT16 );
       
   470     CleanupStack::PushL( expectedForm ); // + expectedForm
       
   471 
       
   472     TUint16 values[] =
       
   473         {
       
   474         EMTPScanTypeProgressive
       
   475         };
       
   476 
       
   477     TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
       
   478     for ( TInt i = 0; i < numValues; i++ )
       
   479         {
       
   480         TMTPTypeUint16 data( values[i] );
       
   481         expectedForm->AppendSupportedValueL( data );
       
   482         }
       
   483 
       
   484     // Althrough iObjectProperty is released in ServiceL(),
       
   485     // release it here maybe a more safer way :)
       
   486     if ( iObjectProperty != NULL )
       
   487         {
       
   488         delete iObjectProperty;
       
   489         iObjectProperty = NULL;
       
   490         }
       
   491 
       
   492     iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeScanType, *expectedForm );
       
   493     CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
       
   494     }
       
   495 
       
   496 void CMediaMtpDataProviderGetObjectPropDesc::ServiceVideoFourCCCodecL()
       
   497     {
       
   498     switch( iFormatCode )
       
   499         {
       
   500         case EMTPFormatCodeWMV:
       
   501         case EMTPFormatCodeASF:
       
   502             {
       
   503             CMTPTypeObjectPropDescEnumerationForm* expectedForm =
       
   504                 CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT32 );
       
   505             CleanupStack::PushL( expectedForm ); // + expectedForm
       
   506 
       
   507             TUint32 values[] =
       
   508                 {
       
   509                 EMTPVideoFourCCCodecWMV3
       
   510                 };
       
   511 
       
   512             TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
       
   513             for ( TInt i = 0; i < numValues; i++ )
       
   514                 {
       
   515                 TMTPTypeUint32 data( values[i] );
       
   516                 expectedForm->AppendSupportedValueL( data );
       
   517                 }
       
   518 
       
   519             // comment out asf fourcc for mp2a and mp4a, not sure if this is needed
       
   520             /*if ( iFormatCode == EMTPFormatCodeASF )
       
   521                 {
       
   522                 TUint32 additionalValues[] =
       
   523                     {
       
   524                     EMTPVideoFourCCCodecMP2A,
       
   525                     EMTPVideoFourCCCodecMP4A
       
   526                     };
       
   527 
       
   528                 for ( TInt j = 0; i < sizeof(additionalValues) / sizeof(additionalValues[0]) )
       
   529                     {
       
   530                     TMTPTypeUint32 data( additionalValues[i] );
       
   531                     expectedForm->AppendSupportedValueL( data );
       
   532                     }
       
   533                 }*/
       
   534 
       
   535             // Althrough iObjectProperty is released in ServiceL(),
       
   536             // release it here maybe a more safer way :)
       
   537             if ( iObjectProperty != NULL )
       
   538                 {
       
   539                 delete iObjectProperty;
       
   540                 iObjectProperty = NULL;
       
   541                 }
       
   542 
       
   543             iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeVideoFourCCCodec, *expectedForm );
       
   544             CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
       
   545             }
       
   546             break;
       
   547 
       
   548         default:
       
   549             {
       
   550             PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceVideoFourCCCodecL leave because of invalid formatcode = 0x%x" ), iFormatCode );
       
   551             User::Leave( KErrNotSupported );
       
   552             }
       
   553             break;
       
   554         }
       
   555     }
       
   556 
       
   557 void CMediaMtpDataProviderGetObjectPropDesc::ServiceVideoBitrateL()
       
   558     {
       
   559     switch( iFormatCode )
       
   560         {
       
   561         case EMTPFormatCodeWMV:
       
   562         case EMTPFormatCodeASF:
       
   563             {
       
   564             ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
       
   565                 EMTPWMVMinBitrate,
       
   566                 EMTPWMVMaxBitrate,
       
   567                 EMTPVideoBitrateStep,
       
   568                 ETrue );
       
   569             }
       
   570             break;
       
   571 
       
   572         default:
       
   573             {
       
   574             PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceVideoBitrateL leave because of invalid formatcode = 0x%x" ), iFormatCode );
       
   575             User::Leave( KErrNotSupported );
       
   576             }
       
   577             break;
       
   578         }
       
   579     }
       
   580 
       
   581 void CMediaMtpDataProviderGetObjectPropDesc::ServiceEncodingProfileDescriptionL()
       
   582     {
       
   583     CMTPTypeObjectPropDescEnumerationForm* expectedForm =
       
   584         CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeString ); // + expectedForm
       
   585 
       
   586     CMTPTypeString* string = CMTPTypeString::NewLC( _L( "SP@LL" ) );
       
   587     expectedForm->AppendSupportedValueL( *string );
       
   588     string->SetL(_L("SP@ML"));
       
   589     expectedForm->AppendSupportedValueL( *string );
       
   590     string->SetL(_L("MP@LL"));
       
   591     expectedForm->AppendSupportedValueL( *string );
       
   592 
       
   593     CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
       
   594     propertyInfo.iDataType = EMTPTypeString;
       
   595     propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm;
       
   596     propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadWrite;
       
   597     iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeEncodingProfile,
       
   598         propertyInfo,
       
   599         expectedForm );
       
   600 
       
   601     CleanupStack::PopAndDestroy( string );
       
   602     CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
       
   603     }
       
   604 
       
   605 void CMediaMtpDataProviderGetObjectPropDesc::ServiceRangeFormDescriptionL( TUint16 aPropCode,
       
   606     TUint32 aMinValue,
       
   607     TUint32 aMaxValue,
       
   608     TUint32 aStepValue,
       
   609     TBool aIsReadOnly )
       
   610     {
       
   611     CMTPTypeObjectPropDescRangeForm* form =
       
   612         CMTPTypeObjectPropDescRangeForm::NewLC( EMTPTypeUINT32 ); // + form
       
   613 
       
   614     // Set expected values
       
   615     form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMinimumValue, aMinValue );
       
   616     form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMaximumValue, aMaxValue );
       
   617     form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EStepSize, aStepValue );
       
   618 
       
   619     // Althrough iObjectProperty is released in ServiceL(),
       
   620     // release it here maybe a more safer way
       
   621     if ( iObjectProperty != NULL )
       
   622         {
       
   623         delete iObjectProperty;
       
   624         iObjectProperty = NULL;
       
   625         }
       
   626 
       
   627     CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
       
   628     propertyInfo.iDataType = EMTPTypeUINT32;
       
   629     propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::ERangeForm;
       
   630     propertyInfo.iGetSet = !aIsReadOnly;
       
   631     iObjectProperty = CMTPTypeObjectPropDesc::NewL( aPropCode, propertyInfo, form );
       
   632 
       
   633     CleanupStack::PopAndDestroy( form ); // - form
       
   634     }
       
   635 
       
   636 // -----------------------------------------------------------------------------
       
   637 // CGetObjectPropDesc::ServiceDRMStatusL
       
   638 // Create list of possible DRM status and create new ObjectPropDesc
       
   639 // -----------------------------------------------------------------------------
       
   640 //
       
   641 void CMediaMtpDataProviderGetObjectPropDesc::ServiceDRMStatusL()
       
   642     {
       
   643     CMTPTypeObjectPropDescEnumerationForm* expectedForm =
       
   644         CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT16 );
       
   645     CleanupStack::PushL( expectedForm ); // + expectedForm
       
   646 
       
   647     TUint16 values[] =
       
   648         {
       
   649         EMTPDrmNoProtection,
       
   650         EMTPDrmProtection,
       
   651         EMTPDrmReserveForMTP,
       
   652         EMTPDrmVenderExtension
       
   653         };
       
   654 
       
   655     TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
       
   656     for ( TInt i = 0; i < numValues; i++ )
       
   657         {
       
   658         TMTPTypeUint16 data( values[i] );
       
   659         expectedForm->AppendSupportedValueL( data );
       
   660         }
       
   661 
       
   662     // Althrough iObjectProperty is released in ServiceL(),
       
   663     // release it here maybe a more safer way :)
       
   664     if ( iObjectProperty != NULL )
       
   665         {
       
   666         delete iObjectProperty;
       
   667         iObjectProperty = NULL;
       
   668         }
       
   669 
       
   670     iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDRMStatus, *expectedForm );
       
   671     CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
       
   672     }
       
   673 
       
   674 // -----------------------------------------------------------------------------
       
   675 // CMediaMtpDataProviderGetObjectPropDesc::ServiceOMADRMStatusL
       
   676 // Create list of possible OMA DRM status and create new ObjectPropDesc
       
   677 // -----------------------------------------------------------------------------
       
   678 //
       
   679 void CMediaMtpDataProviderGetObjectPropDesc::ServiceOMADRMStatusL()
       
   680     {
       
   681     CMTPTypeObjectPropDescEnumerationForm* expectedForm =
       
   682         CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT8 );
       
   683     CleanupStack::PushL( expectedForm ); // + expectedForm
       
   684 
       
   685     TUint8 values[] =
       
   686         {
       
   687         EMTPOMADrmNoProtection,
       
   688         EMTPOMADrmProtection,
       
   689         };
       
   690 
       
   691     TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
       
   692     for ( TInt i = 0; i < numValues; i++ )
       
   693         {
       
   694         TMTPTypeUint8 data( values[i] );
       
   695         expectedForm->AppendSupportedValueL( data );
       
   696         }
       
   697 
       
   698     // Althrough iObjectProperty is released in ServiceL(),
       
   699     // release it here maybe a more safer way :)
       
   700     if ( iObjectProperty != NULL )
       
   701         {
       
   702         delete iObjectProperty;
       
   703         iObjectProperty = NULL;
       
   704         }
       
   705 
       
   706     CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
       
   707     propertyInfo.iDataType = EMTPTypeUINT8;
       
   708     propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm;
       
   709 
       
   710     iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPExtObjectPropCodeOmaDrmStatus,
       
   711         propertyInfo,
       
   712         expectedForm );
       
   713     CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
       
   714     }
       
   715 
       
   716 // end of file