--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetobjectpropdesc.cpp Thu Dec 17 08:55:47 2009 +0200
@@ -0,0 +1,716 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implement the operation: GetObjectPropDesc
+*
+*/
+
+#include <mtp/cmtptypeobjectpropdesc.h>
+#include <mtp/mtpprotocolconstants.h>
+#include <mtp/cmtptypestring.h>
+
+#include "cmediamtpdataprovidergetobjectpropdesc.h"
+#include "mediamtpdataproviderconst.h"
+#include "mmmtpdplogger.h"
+#include "mmmtpdpdefs.h"
+
+const TUint32 KMTPDescriptionLen = 0x00000200;
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderGetObjectPropDesc::NewL
+// Two-phase construction method
+// -----------------------------------------------------------------------------
+//
+MMmRequestProcessor* CMediaMtpDataProviderGetObjectPropDesc::NewL( MMTPDataProviderFramework& aFramework,
+ MMTPConnection& aConnection,
+ MMmMtpDpConfig& aDpConfig )
+ {
+ CMediaMtpDataProviderGetObjectPropDesc* self =
+ new ( ELeave ) CMediaMtpDataProviderGetObjectPropDesc( aFramework,
+ aConnection,
+ aDpConfig );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderGetObjectPropDesc::ConstructL
+// Two-phase construction method
+// -----------------------------------------------------------------------------
+//
+void CMediaMtpDataProviderGetObjectPropDesc::ConstructL()
+ {
+ CGetObjectPropDesc::ConstructL();
+ }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderGetObjectPropDesc::~CMediaMtpDataProviderGetObjectPropDesc
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CMediaMtpDataProviderGetObjectPropDesc::~CMediaMtpDataProviderGetObjectPropDesc()
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderGetObjectPropDesc::CMediaMtpDataProviderGetObjectPropDesc
+// Standard c++ constructor
+// -----------------------------------------------------------------------------
+//
+CMediaMtpDataProviderGetObjectPropDesc::CMediaMtpDataProviderGetObjectPropDesc( MMTPDataProviderFramework& aFramework,
+ MMTPConnection& aConnection,
+ MMmMtpDpConfig& aDpConfig ) :
+ CGetObjectPropDesc( aFramework, aConnection, aDpConfig )
+ {
+
+ }
+
+void CMediaMtpDataProviderGetObjectPropDesc::ServiceSpecificObjectPropertyL(TUint16 aPropCode)
+ {
+ switch (aPropCode)
+ {
+ // format specific
+ case EMTPObjectPropCodeArtist: // Artist
+ case EMTPObjectPropCodeTrack: // Track
+ case EMTPObjectPropCodeGenre: // Genre
+ case EMTPObjectPropCodeUseCount: // Use Count
+ case EMTPObjectPropCodeAlbumName: // Album Name
+ case EMTPObjectPropCodeAlbumArtist: // Album Artist
+ case EMTPObjectPropCodeOriginalReleaseDate: // Original Release Date
+ case EMTPObjectPropCodeComposer: // Composer
+ case EMTPObjectPropCodeParentalRating:
+ iObjectProperty = CMTPTypeObjectPropDesc::NewL( aPropCode );
+ break;
+
+ // Number of Channels (m)
+ case EMTPObjectPropCodeNumberOfChannels:
+ ServiceNumberOfChannelsL();
+ break;
+
+ // Sample Rate (HAS MINIMUM AND MAX VALUE)
+ case EMTPObjectPropCodeSampleRate:
+ ServiceCodeSampleRateL();
+ break;
+
+ // Audio Wave Codec (MAY REQUIRED LIMITED NUMBER TO BE PRODUCED)
+ case EMTPObjectPropCodeAudioWAVECodec:
+ ServiceCodeWaveCodecL();
+ break;
+
+ // Audio Bit Rate (MAY REQUIRED LIMITED NUMBER TO BE PRODUCED)
+ case EMTPObjectPropCodeAudioBitRate:
+ ServiceCodeAudioBitrateL();
+ break;
+
+ // Duration
+ case EMTPObjectPropCodeDuration:
+ ServiceDurationL();
+ break;
+
+ // Description
+ case EMTPObjectPropCodeDescription:
+ ServiceDescriptionL();
+ break;
+
+ case EMTPObjectPropCodeWidth:
+ ServiceRangeFormDescriptionL( aPropCode,
+ EMTPMinWidth,
+ EMTPMaxWidth,
+ EMTPStepWidth );
+ break;
+
+ case EMTPObjectPropCodeHeight:
+ ServiceRangeFormDescriptionL( aPropCode,
+ EMTPMinHeight,
+ EMTPMaxHeight,
+ EMTPStepHeight );
+ break;
+
+ case EMTPObjectPropCodeScanType:
+ ServiceScanTypeDescriptionL();
+ break;
+
+ case EMTPObjectPropCodeVideoFourCCCodec:
+ ServiceVideoFourCCCodecL();
+ break;
+
+ case EMTPObjectPropCodeVideoBitRate:
+ ServiceRangeFormDescriptionL( aPropCode,
+ EMTPWMVMinBitrate,
+ EMTPWMVMaxBitrate,
+ EMTPVideoBitrateStep,
+ ETrue );
+ break;
+
+ case EMTPObjectPropCodeFramesPerThousandSeconds:
+ ServiceRangeFormDescriptionL( aPropCode,
+ EMTPMinFramesPerThousandSeconds,
+ EMTPMaxFramesPerThousandSeconds,
+ EMTPStepFramesPerThousandSeconds );
+ break;
+
+ case EMTPObjectPropCodeKeyFrameDistance:
+ ServiceRangeFormDescriptionL( aPropCode,
+ EMTPMinKeyFrameDistance,
+ EMTPMaxKeyFrameDistance,
+ EMTPStepKeyFrameDistance );
+ break;
+
+ case EMTPObjectPropCodeEncodingProfile:
+ ServiceEncodingProfileDescriptionL();
+ break;
+
+ case EMTPObjectPropCodeDRMStatus:
+ ServiceDRMStatusL();
+ break;
+
+ case EMTPExtObjectPropCodeOmaDrmStatus:
+ ServiceOMADRMStatusL();
+ break;
+
+ default:
+ User::Leave( KErrNotSupported );
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderGetObjectPropDesc::ServiceDescriptionL()
+// Create Description and create new ObjectPropDesc
+// -----------------------------------------------------------------------------
+//
+void CMediaMtpDataProviderGetObjectPropDesc::ServiceDescriptionL()
+ {
+ TMTPTypeUint32 uint32Data( KMTPDescriptionLen );
+
+ // Althrough iObjectProperty is released in ServiceL(),
+ // release it here maybe a more safer way
+ if ( iObjectProperty != NULL )
+ {
+ delete iObjectProperty;
+ iObjectProperty = NULL;
+ }
+
+ iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDescription,
+ CMTPTypeObjectPropDesc::ELongStringForm,
+ &uint32Data );
+ }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderGetObjectPropDesc::ServiceNumberOfChannelsL
+// Create list of possible Channel numbers and create new ObjectPropDesc
+// -----------------------------------------------------------------------------
+//
+void CMediaMtpDataProviderGetObjectPropDesc::ServiceNumberOfChannelsL()
+ {
+ PRINT( _L( "MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL" ) );
+
+ CMTPTypeObjectPropDescEnumerationForm* expectedForm = CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT16 );
+ CleanupStack::PushL( expectedForm ); // + expectedForm
+
+ TUint16 values[] =
+ {
+ EMTPChannelMono,
+ EMTPChannelStereo
+ };
+
+ TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
+
+ for ( TInt i = 0; i < numValues; i++ )
+ {
+ TMTPTypeUint16 data( values[i] );
+ expectedForm->AppendSupportedValueL( data );
+ }
+
+ // Althrough iObjectProperty is released in ServiceL(),
+ // release it here maybe a more safer way :)
+ if ( iObjectProperty != NULL )
+ {
+ delete iObjectProperty;
+ iObjectProperty = NULL;
+ }
+
+ iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeNumberOfChannels, *expectedForm );
+ CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
+
+ PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL" ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL
+// Create list of possible Sample rate list and create new ObjectPropDesc
+// -----------------------------------------------------------------------------
+//
+void CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL()
+ {
+ // if some format does not support the sample rate,
+ // here still need an instance of CMTPTypeObjectPropDesc.
+ PRINT( _L( "MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL" ) );
+
+ CMTPTypeObjectPropDescEnumerationForm* expectedForm =
+ CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); // + expectedForm
+
+ TUint32 values[] =
+ {
+ EMTPSampleRate8K ,
+ EMTPSampleRate16K,
+ EMTPSampleRate22_05K,
+ EMTPSampleRate24K,
+ EMTPSampleRate32K,
+ EMTPSampleRate44_1K,
+ EMTPSampleRate48K
+ };
+
+ TInt numValues = sizeof( values ) / sizeof( values[0] ) ;
+
+ for ( TInt i = 0; i < numValues; i++ )
+ {
+ TMTPTypeUint32 data( values[i] );
+ expectedForm->AppendSupportedValueL( data );
+ }
+
+ // Althrough iObjectProperty is released in ServiceL(),
+ // release it here maybe a more safer way :)
+ if ( iObjectProperty != NULL )
+ {
+ delete iObjectProperty;
+ iObjectProperty = NULL;
+ }
+
+ iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeSampleRate, CMTPTypeObjectPropDesc::EEnumerationForm, expectedForm );
+ CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
+
+ PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL" ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderGetObjectPropDesc::ServiceWaveCodecL
+// Create list of possible bitrate types and create new ObjectPropDesc
+// -----------------------------------------------------------------------------
+//
+void CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL()
+ {
+ PRINT1( _L( "MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL, format = 0x%x" ), iFormatCode );
+
+ CMTPTypeObjectPropDescEnumerationForm* form =
+ CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); // + form
+
+ switch (iFormatCode)
+ {
+ case EMTPFormatCodeWMA:
+ case EMTPFormatCodeWMV:
+ case EMTPFormatCodeASF:
+ {
+ PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL format = 0x%x" ), iFormatCode );
+ TMTPTypeUint32 data( EMTPAudioWAVECodecWMA );
+ form->AppendSupportedValueL( data );
+ }
+ break;
+
+ case EMTPFormatCodeMP3:
+ {
+ PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL format = 0x%x" ), iFormatCode );
+ TMTPTypeUint32 data( EMTPAudioWAVECodecMP3 );
+ form->AppendSupportedValueL( data );
+ }
+ break;
+
+ case EMTPFormatCodeMP4Container:
+ case EMTPFormatCode3GPContainer:
+ case EMTPFormatCodeAAC:
+ {
+ PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL format = 0x%x" ), iFormatCode );
+ TMTPTypeUint32 data( EMTPAudioWAVECodecAAC );
+ form->AppendSupportedValueL( data );
+ }
+ break;
+
+ case EMTPFormatCodeWAV:
+ {
+ PRINT1( _L("MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL format = 0x%x"), iFormatCode );
+ TMTPTypeUint32 data( EMTPAudioWAVECodecPCM );
+ form->AppendSupportedValueL( data );
+ }
+ break;
+
+ default:
+ {
+ PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL leave because of invalid formatcode = 0x%x" ), iFormatCode );
+ User::Leave(KErrNotSupported);
+ }
+ break;
+ }
+
+ // Althrough iObjectProperty is released in ServiceL(),
+ // release it here maybe a more safer way :)
+ if ( iObjectProperty != NULL )
+ {
+ delete iObjectProperty;
+ iObjectProperty = NULL;
+ }
+
+ iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeAudioWAVECodec, *form );
+ CleanupStack::PopAndDestroy( form ); // - form
+
+ PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL" ) );
+ }
+
+void CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeAudioBitrateL()
+ {
+ PRINT1( _L("MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeAudioBitrate, format = 0x%x"), iFormatCode );
+
+ switch (iFormatCode)
+ {
+ case EMTPFormatCodeWMA:
+ case EMTPFormatCodeWMV:
+ case EMTPFormatCodeASF:
+ {
+ ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
+ EMTPWMAMinBitrate,
+ EMTPWMAMaxBitrate,
+ EMTPAudioBitrateStep );
+ }
+ break;
+
+ case EMTPFormatCodeMP3:
+ {
+ ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
+ EMTPMP3MinBitrate,
+ EMTPMP3MaxBitrate,
+ EMTPAudioBitrateStep );
+ }
+ break;
+
+ case EMTPFormatCodeAAC:
+ {
+ ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
+ EMTPAACMinBitrate,
+ EMTPAACMaxBitrate,
+ EMTPAudioBitrateStep );
+ }
+ break;
+
+ case EMTPFormatCodeWAV:
+ {
+ ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
+ EMTPPCMMinBitrate,
+ EMTPPCMMaxBitrate,
+ EMTPAudioBitrateStep );
+ }
+ break;
+
+ case EMTPFormatCodeMP4Container:
+ case EMTPFormatCode3GPContainer:
+ {
+ ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
+ EMTPAACPlusMinBitrate,
+ EMTPAACPlusMaxBitrate,
+ EMTPAudioBitrateStep );
+ }
+ break;
+
+ default:
+ {
+ PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeAudioBitRateL leave because of invalid formatcode = 0x%x" ), iFormatCode );
+ User::Leave( KErrNotSupported );
+ }
+ }
+
+ PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeAudioBitRateL" ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CGetObjectPropDesc::ServiceDurationL()
+// Create list of Duration types and create new ObjectPropDesc
+// -----------------------------------------------------------------------------
+//
+void CMediaMtpDataProviderGetObjectPropDesc::ServiceDurationL()
+ {
+
+ PRINT( _L( "MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceDurationL" ) );
+
+ CMTPTypeObjectPropDescRangeForm* form = CMTPTypeObjectPropDescRangeForm::NewLC( EMTPTypeUINT32 ); // + form
+
+ // Set expected values
+ form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMinimumValue, EMTPMinDuration );
+ form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMaximumValue, EMTPMaxDuration );
+ form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EStepSize, EMTPDurationStep );
+
+ // Althrough iObjectProperty is released in ServiceL(),
+ // release it here maybe a more safer way
+ if ( iObjectProperty != NULL )
+ {
+ delete iObjectProperty;
+ iObjectProperty = NULL;
+ }
+
+ iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDuration, *form );
+ CleanupStack::PopAndDestroy( form ); // - form
+
+ PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceDurationL" ) );
+ }
+
+void CMediaMtpDataProviderGetObjectPropDesc::ServiceScanTypeDescriptionL()
+ {
+ CMTPTypeObjectPropDescEnumerationForm* expectedForm =
+ CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT16 );
+ CleanupStack::PushL( expectedForm ); // + expectedForm
+
+ TUint16 values[] =
+ {
+ EMTPScanTypeProgressive
+ };
+
+ TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
+ for ( TInt i = 0; i < numValues; i++ )
+ {
+ TMTPTypeUint16 data( values[i] );
+ expectedForm->AppendSupportedValueL( data );
+ }
+
+ // Althrough iObjectProperty is released in ServiceL(),
+ // release it here maybe a more safer way :)
+ if ( iObjectProperty != NULL )
+ {
+ delete iObjectProperty;
+ iObjectProperty = NULL;
+ }
+
+ iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeScanType, *expectedForm );
+ CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
+ }
+
+void CMediaMtpDataProviderGetObjectPropDesc::ServiceVideoFourCCCodecL()
+ {
+ switch( iFormatCode )
+ {
+ case EMTPFormatCodeWMV:
+ case EMTPFormatCodeASF:
+ {
+ CMTPTypeObjectPropDescEnumerationForm* expectedForm =
+ CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT32 );
+ CleanupStack::PushL( expectedForm ); // + expectedForm
+
+ TUint32 values[] =
+ {
+ EMTPVideoFourCCCodecWMV3
+ };
+
+ TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
+ for ( TInt i = 0; i < numValues; i++ )
+ {
+ TMTPTypeUint32 data( values[i] );
+ expectedForm->AppendSupportedValueL( data );
+ }
+
+ // comment out asf fourcc for mp2a and mp4a, not sure if this is needed
+ /*if ( iFormatCode == EMTPFormatCodeASF )
+ {
+ TUint32 additionalValues[] =
+ {
+ EMTPVideoFourCCCodecMP2A,
+ EMTPVideoFourCCCodecMP4A
+ };
+
+ for ( TInt j = 0; i < sizeof(additionalValues) / sizeof(additionalValues[0]) )
+ {
+ TMTPTypeUint32 data( additionalValues[i] );
+ expectedForm->AppendSupportedValueL( data );
+ }
+ }*/
+
+ // Althrough iObjectProperty is released in ServiceL(),
+ // release it here maybe a more safer way :)
+ if ( iObjectProperty != NULL )
+ {
+ delete iObjectProperty;
+ iObjectProperty = NULL;
+ }
+
+ iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeVideoFourCCCodec, *expectedForm );
+ CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
+ }
+ break;
+
+ default:
+ {
+ PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceVideoFourCCCodecL leave because of invalid formatcode = 0x%x" ), iFormatCode );
+ User::Leave( KErrNotSupported );
+ }
+ break;
+ }
+ }
+
+void CMediaMtpDataProviderGetObjectPropDesc::ServiceVideoBitrateL()
+ {
+ switch( iFormatCode )
+ {
+ case EMTPFormatCodeWMV:
+ case EMTPFormatCodeASF:
+ {
+ ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate,
+ EMTPWMVMinBitrate,
+ EMTPWMVMaxBitrate,
+ EMTPVideoBitrateStep,
+ ETrue );
+ }
+ break;
+
+ default:
+ {
+ PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceVideoBitrateL leave because of invalid formatcode = 0x%x" ), iFormatCode );
+ User::Leave( KErrNotSupported );
+ }
+ break;
+ }
+ }
+
+void CMediaMtpDataProviderGetObjectPropDesc::ServiceEncodingProfileDescriptionL()
+ {
+ CMTPTypeObjectPropDescEnumerationForm* expectedForm =
+ CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeString ); // + expectedForm
+
+ CMTPTypeString* string = CMTPTypeString::NewLC( _L( "SP@LL" ) );
+ expectedForm->AppendSupportedValueL( *string );
+ string->SetL(_L("SP@ML"));
+ expectedForm->AppendSupportedValueL( *string );
+ string->SetL(_L("MP@LL"));
+ expectedForm->AppendSupportedValueL( *string );
+
+ CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
+ propertyInfo.iDataType = EMTPTypeString;
+ propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm;
+ propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadWrite;
+ iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeEncodingProfile,
+ propertyInfo,
+ expectedForm );
+
+ CleanupStack::PopAndDestroy( string );
+ CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
+ }
+
+void CMediaMtpDataProviderGetObjectPropDesc::ServiceRangeFormDescriptionL( TUint16 aPropCode,
+ TUint32 aMinValue,
+ TUint32 aMaxValue,
+ TUint32 aStepValue,
+ TBool aIsReadOnly )
+ {
+ CMTPTypeObjectPropDescRangeForm* form =
+ CMTPTypeObjectPropDescRangeForm::NewLC( EMTPTypeUINT32 ); // + form
+
+ // Set expected values
+ form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMinimumValue, aMinValue );
+ form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMaximumValue, aMaxValue );
+ form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EStepSize, aStepValue );
+
+ // Althrough iObjectProperty is released in ServiceL(),
+ // release it here maybe a more safer way
+ if ( iObjectProperty != NULL )
+ {
+ delete iObjectProperty;
+ iObjectProperty = NULL;
+ }
+
+ CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
+ propertyInfo.iDataType = EMTPTypeUINT32;
+ propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::ERangeForm;
+ propertyInfo.iGetSet = !aIsReadOnly;
+ iObjectProperty = CMTPTypeObjectPropDesc::NewL( aPropCode, propertyInfo, form );
+
+ CleanupStack::PopAndDestroy( form ); // - form
+ }
+
+// -----------------------------------------------------------------------------
+// CGetObjectPropDesc::ServiceDRMStatusL
+// Create list of possible DRM status and create new ObjectPropDesc
+// -----------------------------------------------------------------------------
+//
+void CMediaMtpDataProviderGetObjectPropDesc::ServiceDRMStatusL()
+ {
+ CMTPTypeObjectPropDescEnumerationForm* expectedForm =
+ CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT16 );
+ CleanupStack::PushL( expectedForm ); // + expectedForm
+
+ TUint16 values[] =
+ {
+ EMTPDrmNoProtection,
+ EMTPDrmProtection,
+ EMTPDrmReserveForMTP,
+ EMTPDrmVenderExtension
+ };
+
+ TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
+ for ( TInt i = 0; i < numValues; i++ )
+ {
+ TMTPTypeUint16 data( values[i] );
+ expectedForm->AppendSupportedValueL( data );
+ }
+
+ // Althrough iObjectProperty is released in ServiceL(),
+ // release it here maybe a more safer way :)
+ if ( iObjectProperty != NULL )
+ {
+ delete iObjectProperty;
+ iObjectProperty = NULL;
+ }
+
+ iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDRMStatus, *expectedForm );
+ CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
+ }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderGetObjectPropDesc::ServiceOMADRMStatusL
+// Create list of possible OMA DRM status and create new ObjectPropDesc
+// -----------------------------------------------------------------------------
+//
+void CMediaMtpDataProviderGetObjectPropDesc::ServiceOMADRMStatusL()
+ {
+ CMTPTypeObjectPropDescEnumerationForm* expectedForm =
+ CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT8 );
+ CleanupStack::PushL( expectedForm ); // + expectedForm
+
+ TUint8 values[] =
+ {
+ EMTPOMADrmNoProtection,
+ EMTPOMADrmProtection,
+ };
+
+ TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
+ for ( TInt i = 0; i < numValues; i++ )
+ {
+ TMTPTypeUint8 data( values[i] );
+ expectedForm->AppendSupportedValueL( data );
+ }
+
+ // Althrough iObjectProperty is released in ServiceL(),
+ // release it here maybe a more safer way :)
+ if ( iObjectProperty != NULL )
+ {
+ delete iObjectProperty;
+ iObjectProperty = NULL;
+ }
+
+ CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
+ propertyInfo.iDataType = EMTPTypeUINT8;
+ propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm;
+
+ iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPExtObjectPropCodeOmaDrmStatus,
+ propertyInfo,
+ expectedForm );
+ CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
+ }
+
+// end of file