--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetinterdependentpropdesc.cpp Thu Dec 17 08:55:47 2009 +0200
@@ -0,0 +1,461 @@
+/*
+* 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: GetInterdenpendentPropDesc
+*
+*/
+
+
+#include "cmediamtpdataprovidergetinterdependentpropdesc.h"
+#include "mediamtpdataproviderconst.h"
+#include "mmmtpdplogger.h"
+#include "tobjectdescription.h"
+#include "mmmtpdpdefs.h"
+#include "mmmtpdpconfig.h"
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderGetInterDependentPropDesc::NewL
+// Two-phase construction method
+// -----------------------------------------------------------------------------
+//
+MMmRequestProcessor* CMediaMtpDataProviderGetInterDependentPropDesc::NewL( MMTPDataProviderFramework& aFramework,
+ MMTPConnection& aConnection,
+ MMmMtpDpConfig& aDpConfig )
+ {
+ CMediaMtpDataProviderGetInterDependentPropDesc* self =
+ new ( ELeave ) CMediaMtpDataProviderGetInterDependentPropDesc( aFramework,
+ aConnection );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CMediaDpMtpGetInterDependentPropDesc::ConstructL
+// Two-phase construction method
+// -----------------------------------------------------------------------------
+//
+void CMediaMtpDataProviderGetInterDependentPropDesc::ConstructL()
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderGetInterDependentPropDesc::~CMediaMtpDataProviderGetInterDependentPropDesc
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CMediaMtpDataProviderGetInterDependentPropDesc::~CMediaMtpDataProviderGetInterDependentPropDesc()
+ {
+ delete iDataset;
+ delete iProperties;
+ }
+
+// -----------------------------------------------------------------------------
+// CMTPGetInterDependentPropDesc::CMTPGetInterDependentPropDesc
+// Standard c++ constructor
+// -----------------------------------------------------------------------------
+//
+CMediaMtpDataProviderGetInterDependentPropDesc::CMediaMtpDataProviderGetInterDependentPropDesc( MMTPDataProviderFramework& aFramework,
+ MMTPConnection& aConnection ) :
+ CRequestProcessor( aFramework, aConnection, 0, NULL )
+ {
+ PRINT( _L( "Operation: GetInterdependentPropDesc(0x9807)" ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderGetInterDependentPropDesc::CheckRequestL
+// Verify the reqeust and returns it
+// -----------------------------------------------------------------------------
+//
+TMTPResponseCode CMediaMtpDataProviderGetInterDependentPropDesc::CheckRequestL()
+ {
+ TMTPResponseCode responseCode = CRequestProcessor::CheckRequestL();
+ iFormatCode = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
+
+ if ( EMTPRespCodeOK == responseCode )
+ {
+ TInt count = sizeof( KMediaMtpDataProviderSupportedFormats ) / sizeof( TUint16 );
+
+ responseCode = EMTPRespCodeInvalidObjectFormatCode;
+
+ for ( TInt i = 0; i < count; i++ )
+ {
+ if ( iFormatCode == KMediaMtpDataProviderSupportedFormats[i] )
+ {
+ responseCode = EMTPRespCodeOK;
+ break;
+ }
+ }
+ }
+
+ return responseCode;
+ }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderGetInterDependentPropDesc::ServiceL
+// service a request at request phase
+// -----------------------------------------------------------------------------
+//
+void CMediaMtpDataProviderGetInterDependentPropDesc::ServiceL()
+ {
+ PRINT( _L( "MM MTP => CMediaMtpDataProviderGetInterDependentPropDesc::ServiceL" ) );
+
+ // Clear the data set.
+ delete iDataset;
+ iDataset = NULL;
+ iDataset = CMTPTypeInterdependentPropDesc::NewL();
+
+ TBool audioWaveCodecSupported = EFalse;
+ TBool audioBitRateSupported = EFalse;
+ TBool videoFourCcCodecSupported = EFalse;
+ TBool videoBitRateSupported = EFalse;
+
+ switch ( iFormatCode )
+ {
+ case EMTPFormatCodeWMA:
+ case EMTPFormatCodeMP3:
+ case EMTPFormatCodeAAC:
+ case EMTPFormatCodeWAV:
+ {
+ TInt count = sizeof( KMmMtpDpSupportedPropMandatoryAudio ) / sizeof( TUint16 );
+
+ for ( TInt i = 0; i < count; i++ )
+ {
+ switch ( KMmMtpDpSupportedPropMandatoryAudio[i] )
+ {
+ case EMTPObjectPropCodeAudioWAVECodec:
+ audioWaveCodecSupported = ETrue;
+ break;
+ case EMTPObjectPropCodeAudioBitRate:
+ audioBitRateSupported = ETrue;
+ break;
+ default:
+ PRINT( _L( "MM MTP <> CMediaMtpDataProviderGetInterDependentPropDesc::ServiceL default" ) );
+ // do nothing
+ break;
+ }
+ }
+ }
+ break;
+
+ case EMTPFormatCodeMP4Container:
+ {
+ TInt count = sizeof( KMmMtpDpSupportedPropMandatoryAudio ) / sizeof( TUint16 );
+
+ for ( TInt i = 0; i < count; i++ )
+ {
+ switch ( KMmMtpDpSupportedPropMandatoryAudio[i] )
+ {
+ case EMTPObjectPropCodeAudioWAVECodec:
+ audioWaveCodecSupported = ETrue;
+ break;
+ case EMTPObjectPropCodeAudioBitRate:
+ audioBitRateSupported = ETrue;
+ break;
+ default:
+ // do nothing
+ break;
+ }
+ }
+ }
+ break;
+
+ case EMTPFormatCode3GPContainer:
+ {
+ TInt count = sizeof( KMmMtpDpSupportedPropMandatoryAudio ) / sizeof( TUint16 );
+
+ for ( TInt i = 0; i < count; i++ )
+ {
+ switch ( KMmMtpDpSupportedPropMandatoryAudio[i] )
+ {
+ case EMTPObjectPropCodeAudioWAVECodec:
+ audioWaveCodecSupported = ETrue;
+ break;
+ case EMTPObjectPropCodeAudioBitRate:
+ audioBitRateSupported = ETrue;
+ break;
+ default:
+ // do nothing
+ break;
+ }
+ }
+ }
+ break;
+
+ case EMTPFormatCodeWMV:
+ case EMTPFormatCodeASF:
+ {
+ TInt count = sizeof( KMmMtpDpSupportedPropMandatoryWMV ) / sizeof( TUint16 );
+
+ for ( TInt i = 0; i < count; i++ )
+ {
+ switch (KMmMtpDpSupportedPropMandatoryWMV[i] )
+ {
+ case EMTPObjectPropCodeAudioWAVECodec:
+ audioWaveCodecSupported = ETrue;
+ break;
+ case EMTPObjectPropCodeAudioBitRate:
+ audioBitRateSupported = ETrue;
+ break;
+ case EMTPObjectPropCodeVideoFourCCCodec:
+ videoFourCcCodecSupported = ETrue;
+ break;
+ case EMTPObjectPropCodeVideoBitRate:
+ videoBitRateSupported = ETrue;
+ break;
+ default:
+ // do nothing
+ break;
+ }
+ }
+ }
+ break;
+
+ default:
+ {
+ PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetInterDependentPropDesc::ServiceL leave because of invalid formatcode = 0x%x" ), iFormatCode );
+ User::Leave( KErrNotSupported );
+ }
+ break;
+ }
+
+ if ( audioWaveCodecSupported && audioBitRateSupported )
+ {
+ if ( videoFourCcCodecSupported && videoBitRateSupported )
+ {
+ iProperties = CMTPTypeInterdependentProperties::NewL();
+ ServiceVideoFourCCCodecL();
+ ServiceVideoBitrateL();
+ iDataset->AppendL( iProperties );
+// CleanupStack::Pop();
+ iProperties = NULL;
+ }
+
+ iProperties = CMTPTypeInterdependentProperties::NewL();
+ ServiceAudioWaveCodecL();
+ ServiceAudioBitrateL();
+ iDataset->AppendL( iProperties );
+// CleanupStack::Pop();
+ iProperties = NULL;
+ }
+
+ // Send the dataset.
+ SendDataL( *iDataset );
+ PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetInterDependentPropDesc::ServiceL" ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderGetInterDependentPropDesc::ServiceAudioWaveCodecL
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaMtpDataProviderGetInterDependentPropDesc::ServiceAudioWaveCodecL()
+ {
+ CMTPTypeObjectPropDescEnumerationForm* form =
+ CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 );
+
+ switch( iFormatCode )
+ {
+ case EMTPFormatCodeWMA:
+ case EMTPFormatCodeWMV:
+ case EMTPFormatCodeASF:
+ form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecWMA ) );
+ break;
+
+ case EMTPFormatCodeMP3:
+ form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecMP3 ) );
+ break;
+
+ case EMTPFormatCodeMP4Container:
+ case EMTPFormatCode3GPContainer:
+ case EMTPFormatCodeAAC:
+ form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecAAC ) );
+ break;
+
+ case EMTPFormatCodeWAV:
+ form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecPCM ) );
+ break;
+
+ default:
+ PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetInterDependentPropDesc::ServiceAudioWaveCodecL leave because of invalid formatcode = 0x%x" ), iFormatCode );
+ User::Leave( KErrNotSupported );
+ break;
+ }
+
+ CMTPTypeObjectPropDesc::TPropertyInfo propInfo;
+ propInfo.iDataType = EMTPTypeUINT32;
+ propInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm;
+ propInfo.iGetSet = CMTPTypeObjectPropDesc::EReadWrite;
+ SetFormForResponseL( EMTPObjectPropCodeAudioWAVECodec, propInfo, form );
+ CleanupStack::PopAndDestroy( form );
+ }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderGetInterDependentPropDesc::ServiceAudioBitrateL
+//
+// -----------------------------------------------------------------------------
+//
+void CMediaMtpDataProviderGetInterDependentPropDesc::ServiceAudioBitrateL()
+ {
+ 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 <> CMediaMtpDataProviderGetInterDependentPropDesc::ServiceAudioBitrateL leave because of invalid formatcode = 0x%x" ), iFormatCode );
+ User::Leave( KErrNotSupported );
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CMediaMtpDataProviderGetInterDependentPropDesc::ServiceVideoFourCCCodecL
+// Create Description and create new ObjectPropDesc
+// -----------------------------------------------------------------------------
+//
+void CMediaMtpDataProviderGetInterDependentPropDesc::ServiceVideoFourCCCodecL()
+ {
+ switch( iFormatCode )
+ {
+ case EMTPFormatCodeWMV:
+ case EMTPFormatCodeASF:
+ {
+ CMTPTypeObjectPropDescEnumerationForm* form =
+ CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT32 );
+ CleanupStack::PushL( form ); // + form
+
+ TUint32 values[] =
+ {
+ EMTPVideoFourCCCodecWMV3
+ };
+
+ TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
+ for ( TInt i = 0; i < numValues; i++ )
+ {
+ TMTPTypeUint32 data( values[i] );
+ form->AppendSupportedValueL( data );
+ }
+ // TODO:
+ CMTPTypeObjectPropDesc::TPropertyInfo propInfo;
+ propInfo.iDataType = EMTPTypeUINT32;
+ propInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm;
+ propInfo.iGetSet = CMTPTypeObjectPropDesc::EReadWrite;
+ SetFormForResponseL( EMTPObjectPropCodeVideoFourCCCodec, propInfo, form );
+ CleanupStack::PopAndDestroy( form ); // - form
+ }
+ break;
+
+ default:
+ {
+ PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetInterDependentPropDesc::ServiceVideoFourCCCodecL leave because of invalid formatcode = 0x%x" ), iFormatCode );
+ User::Leave( KErrNotSupported );
+ }
+ break;
+ }
+ }
+
+void CMediaMtpDataProviderGetInterDependentPropDesc::ServiceVideoBitrateL()
+ {
+ switch( iFormatCode )
+ {
+ case EMTPFormatCodeWMV:
+ case EMTPFormatCodeASF:
+ ServiceRangeFormDescriptionL( EMTPObjectPropCodeVideoBitRate,
+ EMTPWMVMinBitrate,
+ EMTPWMVMaxBitrate,
+ EMTPVideoBitrateStep,
+ ETrue );
+ break;
+
+ default:
+ PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetInterDependentPropDesc::ServiceVideoBitrateL leave because of invalid formatcode = 0x%x" ), iFormatCode );
+ User::Leave( KErrNotSupported );
+ break;
+ }
+ }
+
+void CMediaMtpDataProviderGetInterDependentPropDesc::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 );
+
+ CMTPTypeObjectPropDesc::TPropertyInfo propInfo;
+ propInfo.iDataType = EMTPTypeUINT32;
+ propInfo.iFormFlag = CMTPTypeObjectPropDesc::ERangeForm;
+ propInfo.iGetSet = !aIsReadOnly;
+ SetFormForResponseL( aPropCode, propInfo, form );
+ CleanupStack::PopAndDestroy( form ); // - form
+ }
+
+void CMediaMtpDataProviderGetInterDependentPropDesc::SetFormForResponseL( TUint16 aPropertyCode,
+ CMTPTypeObjectPropDesc::TPropertyInfo& aPropInfo,
+ const MMTPType* aForm )
+ {
+ CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewLC( aPropertyCode,
+ aPropInfo,
+ aForm );
+ // Set group code
+ propertyDesc->SetUint32L( CMTPTypeObjectPropDesc::EGroupCode, EGroupCodeMediaDB );
+
+ iProperties->AppendL( propertyDesc );
+ CleanupStack::Pop( propertyDesc );
+ }
+
+// end of file