diff -r d240f0a77280 -r 780c925249c1 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectpropvalue.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectpropvalue.cpp Mon Mar 15 12:42:31 2010 +0200 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectpropvalue.cpp Wed Mar 31 22:26:09 2010 +0300 @@ -16,6 +16,9 @@ */ +#include +#include + #include "cabstractmediamtpdataprovidergetobjectpropvalue.h" #include "abstractmediamtpdataproviderconst.h" #include "mmmtpdplogger.h" @@ -81,13 +84,64 @@ // invoked or invalid propcode // ----------------------------------------------------------------------------- // -void CAbstractMediaMtpDataProviderGetObjectPropValue::ServiceSpecificObjectPropertyL( TUint16 /*aPropCode*/ ) +void CAbstractMediaMtpDataProviderGetObjectPropValue::ServiceSpecificObjectPropertyL( TUint16 aPropCode ) { - PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderGetObjectPropValue::ServiceSpecificObjectPropertyL, leave with KErrNotSupported")); + PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderGetObjectPropValue::ServiceSpecificObjectPropertyL" ) ); + switch ( aPropCode ) + { + case EMTPObjectPropCodeRepresentativeSampleFormat: + { + iMTPTypeUint16.Set( 0 ); + SendDataL( iMTPTypeUint16 ); + } + break; + + case EMTPObjectPropCodeRepresentativeSampleSize: // fall through + case EMTPObjectPropCodeRepresentativeSampleHeight: // fall through + case EMTPObjectPropCodeRepresentativeSampleWidth: + { + iMTPTypeUint32.Set( 0 ); + SendDataL( iMTPTypeUint32 ); + } + break; - // May need add implementation here for further extension. + case EMTPObjectPropCodeRepresentativeSampleData: + { + if ( iMTPTypeArray != NULL ) + { + delete iMTPTypeArray; + iMTPTypeArray = NULL; + } + iMTPTypeArray = CMTPTypeArray::NewL( EMTPTypeAUINT8 ); + + const TDesC& suid = iObjectInfo->DesC( CMTPObjectMetaData::ESuid ); + PRINT1( _L( "MM MTP <> EMTPObjectPropCodeRepresentativeSampleData file suid=%S" ), &suid ); + RFile sampleFile; + User::LeaveIfError( sampleFile.Open( iFramework.Fs(), suid, EFileShareReadersOnly ) ); + CleanupClosePushL( sampleFile ); // + sampleFile + + TInt size = 0; + User::LeaveIfError( sampleFile.Size( size ) ); + PRINT1( _L( "MM MTP <> EMTPObjectPropCodeRepresentativeSampleData sampleFile.Size() size=%d" ), size ); - User::Leave( KErrNotSupported ); + if( size > 0 ) + { + HBufC8* sampleData = HBufC8::NewLC( size * sizeof(TUint8) ); // + sampleData + TPtr8 samplePtr = sampleData->Des(); + User::LeaveIfError( sampleFile.Read( samplePtr ) ); + iMTPTypeArray->SetByDesL( samplePtr ); + CleanupStack::PopAndDestroy( sampleData ); // - sampleData + } + CleanupStack::PopAndDestroy( &sampleFile ); // - sampleFile + + SendDataL( *iMTPTypeArray ); + } + break; + + default: + PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderGetObjectPropValue::ServiceSpecificObjectPropertyL, leave with KErrNotSupported")); + User::Leave( KErrNotSupported ); + } } // end of file