mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectpropvalue.cpp
branchRCL_3
changeset 17 780c925249c1
parent 9 bee149131e4b
child 55 6c1dfe4da5dd
--- 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 <mtp/cmtptypearray.h>
+#include <f32file.h>
+
 #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