mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectproplist.cpp
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectproplist.cpp Fri Apr 16 15:28:14 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectproplist.cpp Mon May 03 12:58:40 2010 +0300
@@ -16,6 +16,10 @@
*/
+#include <mtp/cmtptypeobjectproplist.h>
+#include <mtp/cmtptypearray.h>
+#include <f32file.h>
+
#include "cabstractmediamtpdataprovidergetobjectproplist.h"
#include "abstractmediamtpdataproviderconst.h"
#include "mmmtpdplogger.h"
@@ -50,7 +54,7 @@
//
CAbstractMediaMtpDataProviderGetObjectPropList::~CAbstractMediaMtpDataProviderGetObjectPropList()
{
-
+ // Do nothing
}
// -----------------------------------------------------------------------------
@@ -61,9 +65,9 @@
CAbstractMediaMtpDataProviderGetObjectPropList::CAbstractMediaMtpDataProviderGetObjectPropList( MMTPDataProviderFramework& aFramework,
MMTPConnection& aConnection,
MMmMtpDpConfig& aDpConfig ) :
- CGetObjectPropList( aFramework, aConnection, aDpConfig )
+ CGetObjectPropList( aFramework, aConnection, aDpConfig )
{
-
+ // Do nothing
}
// -----------------------------------------------------------------------------
@@ -81,11 +85,70 @@
// do nothing here, just leave, as this should never be invoked or invalid propcode
// -----------------------------------------------------------------------------
//
-TInt CAbstractMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL( TUint16 /*aPropCode*/,
- TUint32 /*aHandle*/ )
+TInt CAbstractMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL( TUint16 aPropCode,
+ TUint32 aHandle )
{
- PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL, leave with KErrNotSupported" ) );
- return KErrNotSupported;
+ PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL" ) );
+ TInt err = KErrNone;
+ switch ( aPropCode )
+ {
+ case EMTPObjectPropCodeRepresentativeSampleFormat:
+ {
+ iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) );
+ iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EValue, 0 );
+ }
+ break;
+ case EMTPObjectPropCodeRepresentativeSampleSize:
+ case EMTPObjectPropCodeRepresentativeSampleHeight:
+ case EMTPObjectPropCodeRepresentativeSampleWidth:
+ {
+ iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) );
+ iPropertyElement->SetUint32L( CMTPTypeObjectPropListElement::EValue, 0 );
+ }
+ break;
+ case EMTPObjectPropCodeRepresentativeSampleData:
+ {
+ const TDesC& suid( iObject->DesC( CMTPObjectMetaData::ESuid ) );
+ CMTPTypeArray* desData = CMTPTypeArray::NewLC( EMTPTypeAUINT8 ); // + desData
+
+ RFile sampleFile;
+ TInt err = sampleFile.Open( iFramework.Fs(), suid, EFileShareReadersOnly );
+ PRINT2( _L( "MM MTP <> EMTPObjectPropCodeRepresentativeSampleData open filename=%S, err=%d" ), &suid, err );
+
+ CleanupClosePushL( sampleFile ); // + sampleFile
+ TInt size = 0;
+ if( err == KErrNone )
+ {
+ err = sampleFile.Size( size );
+ }
+ PRINT2( _L( "MM MTP <> EMTPObjectPropCodeRepresentativeSampleData sampleFile.Size size=%d, err=%d" ), size, err );
+ if( err == KErrNone && size > 0 )
+ {
+ HBufC8* sampleData = HBufC8::NewLC( size * sizeof( TUint8 ) ); // + sampleData
+ TPtr8 samplePtr = sampleData->Des();
+ err = sampleFile.Read( samplePtr );
+ PRINT1( _L( "MM MTP <> EMTPObjectPropCodeRepresentativeSampleData sampleFile.Read err=%d" ), err );
+ PRINT1( _L( "MM MTP <> EMTPObjectPropCodeRepresentativeSampleData samplePtr.Size=%d" ), samplePtr.Size() );
+ if( err == KErrNone )
+ {
+ desData->SetByDesL( samplePtr );
+ }
+ CleanupStack::PopAndDestroy( sampleData ); // - sampleData
+ }
+ iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode));
+ iPropertyElement->SetArrayL( CMTPTypeObjectPropListElement::EValue, *desData );
+
+ CleanupStack::PopAndDestroy( &sampleFile ); // - sampleFile
+ CleanupStack::PopAndDestroy( desData ); // - desData
+ }
+ break;
+
+ default:
+ err = KErrNotSupported;
+ }
+
+ PRINT1( _L( "MM MTP <= CAbstractMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL, err = %d" ), err );
+ return err;
}
// end of file