profilesapplication/Profiles/ProfileApp/SettingsViewSrc/ProfileMmfInfoUtility.cpp
branchRCL_3
changeset 11 bc161388e3ce
parent 0 ca436256272f
--- a/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/ProfileMmfInfoUtility.cpp	Mon Mar 15 12:40:33 2010 +0200
+++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/ProfileMmfInfoUtility.cpp	Wed Mar 31 21:31:25 2010 +0300
@@ -27,7 +27,7 @@
 #include <e32std.h>
 #include <badesca.h>
 #include <mmf/common/mmfcontrollerpluginresolver.h>
-
+#include <caf/caf.h>
 namespace
 	{
 	// CONSTANTS
@@ -88,5 +88,72 @@
     return result;
     }
 
+// -----------------------------------------------------------------------------
+// CProfileMmfInfoUtility::IsHeaderDataSupportedL
+// -----------------------------------------------------------------------------
+//
+TBool ProfileMmfInfoUtility::IsHeaderDataSupportedL( const TDesC& aFileName )
+	{
+	TBool result( EFalse );
+	//the max header length is 256 bytes
+	const TInt KMaxHeaderLength( 256 );
+	HBufC8* header = HBufC8::NewLC( KMaxHeaderLength );
+	TPtr8 headerPtr = header->Des();
+	GetFileHeaderDataL( aFileName, headerPtr, KMaxHeaderLength );
+	CMMFFormatSelectionParameters* formatPrms =
+			CMMFFormatSelectionParameters::NewLC();
+	CMMFControllerPluginSelectionParameters* controllerPrms =
+			CMMFControllerPluginSelectionParameters::NewLC();
+
+	// Empty format parameters means: "get all the supported formats"
+	controllerPrms->SetRequiredPlayFormatSupportL( *formatPrms );
+	RMMFControllerImplInfoArray cntrlArray;
+	controllerPrms->ListImplementationsL( cntrlArray );
+
+	for ( TInt i( cntrlArray.Count() - 1 ); i >= 0 && !result; --i )
+		{
+		const RMMFFormatImplInfoArray& infoArray( cntrlArray[i]->PlayFormats() );
+
+		for ( TInt j(infoArray.Count() - 1); j >= 0; --j )
+			{
+			if ( infoArray[j]->SupportsHeaderDataL( *header ) )
+				{
+				result = ETrue;
+				break;
+				}
+			}
+		}
+
+	cntrlArray.ResetAndDestroy();
+	cntrlArray.Close();
+	CleanupStack::PopAndDestroy( 3, header );//controllerPrms, formatPrms and header
+
+	return result;
+	}
+
+// -----------------------------------------------------------------------------
+// CProfileMmfInfoUtility::GetFileHeaderDataL
+// -----------------------------------------------------------------------------
+//
+void ProfileMmfInfoUtility::GetFileHeaderDataL( const TDesC& aFileName,
+		TDes8& aHeaderData, TInt aMaxHeaderLength )
+	{
+	TInt error = KErrNone;
+	using namespace ContentAccess;
+	TVirtualPathPtr path( aFileName, ContentAccess::KDefaultContentObject );
+	CData* data = CData::NewLC( path, EContentShareReadWrite );
+	TInt size = 0;
+	data->DataSizeL( size );
+	if ( size > 0 )
+		{
+		if ( size > aMaxHeaderLength )
+			size = aMaxHeaderLength;
+		TInt pos = 0;
+		error = data->Seek( ESeekStart, pos );
+		error = data->Read( aHeaderData, size );
+		}
+	CleanupStack::PopAndDestroy(); // data
+	}
+
 //  End of File