mmlibs/mmfw/src/ControllerFramework/RecMmfUtilBody.cpp
author hgs
Thu, 07 Oct 2010 22:34:12 +0100
changeset 0 b8ed18f6c07b
permissions -rw-r--r--
2010wk40
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     1
// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     2
// All rights reserved.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     7
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     8
// Initial Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    10
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    11
// Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    12
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    13
// Description:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    14
// This is the body of the MMF recognizer utility class
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    15
// 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    16
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    17
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    18
#include <badesca.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    19
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    20
#include <mmf/common/mmfcontrollerpluginresolver.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    21
#include "RecMmfUtilBody.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    22
#include <mmf/server/mmfdatasourcesink.hrh>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    23
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    24
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    25
// MMF Recognizer Utility class body constructor
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    26
CMmfRecognizerUtil::CBody::CBody():
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    27
	CActive(CActive::EPriorityStandard)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    28
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    29
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    30
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    31
CMmfRecognizerUtil::CBody::~CBody()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    32
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    33
	Cancel();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    34
	iEcomSession.Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    35
	iControllers.ResetAndDestroy();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    36
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    37
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    38
// Request ECom to be notified when interface implementation registration 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    39
// data changes so that we can refresh the list of interface implementations.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    40
void CMmfRecognizerUtil::CBody::StartNotification()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    41
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    42
	iEcomSession.NotifyOnChange(iStatus);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    43
	SetActive();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    44
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    45
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    46
// build a list of interface implementation objects
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    47
void CMmfRecognizerUtil::CBody::BuildControllerListL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    48
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    49
	iControllers.ResetAndDestroy();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    50
	CMMFControllerPluginSelectionParameters* cSelect = 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    51
		CMMFControllerPluginSelectionParameters::NewLC();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    52
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    53
	CMMFFormatSelectionParameters* fSelect = 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    54
		CMMFFormatSelectionParameters::NewLC();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    55
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    56
	cSelect->SetRequiredPlayFormatSupportL(*fSelect);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    57
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    58
	// Set the media ids
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    59
	RArray<TUid> mediaIds;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    60
	CleanupClosePushL(mediaIds);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    61
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    62
	User::LeaveIfError(mediaIds.Append(KUidMediaTypeAudio));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    63
	User::LeaveIfError(mediaIds.Append(KUidMediaTypeVideo));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    64
	cSelect->SetMediaIdsL(mediaIds, CMMFPluginSelectionParameters::EAllowOtherMediaIds);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    65
																	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    66
	cSelect->ListImplementationsL(iControllers);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    67
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    68
	// Clean up
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    69
	CleanupStack::PopAndDestroy(3, cSelect);// mediaIds, fSelect, cSelect
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    70
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    71
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    72
void CMmfRecognizerUtil::CBody::ConstructL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    73
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    74
	BuildControllerListL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    75
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    76
	CActiveScheduler::Add(this);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    77
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    78
	iEcomSession = REComSession::OpenL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    79
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    80
	// request notification from ECOM of any file system changes
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    81
	StartNotification();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    82
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    83
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    84
void CMmfRecognizerUtil::CBody::RunL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    85
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    86
	BuildControllerListL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    87
	StartNotification();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    88
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    89
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    90
void CMmfRecognizerUtil::CBody::DoCancel()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    91
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    92
	if (iStatus == KRequestPending)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    93
		iEcomSession.CancelNotifyOnChange(iStatus);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    94
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    95
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    96
/* 	Determine whether the supplied data header on its own is recognized,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    97
	or the data header plus the file suffix together are recognized,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    98
	and if so return the associated MIME type.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    99
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   100
	@param	aFileName
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   101
			The name of the file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   102
	@param	aImageData
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   103
			A descriptor containing the header
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   104
	@param	aMimeType
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   105
			A user-supplied descriptor in which the MIME type is returned
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   106
	@leave	KErrUnderflow 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   107
			Not enough data in descriptor to identify whether it is supported
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   108
			by any plugin.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   109
	@leave	This method may also leave with one of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   110
	@return	EMatchNone if a match was not found.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   111
			EMatchData if a data match was found.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   112
			EMatchName if a data and file suffix match was found.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   113
	@post	If recognized, the caller's descriptor is filled with the MIME types
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   114
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   115
CMmfRecognizerUtil::TMatchLevel CMmfRecognizerUtil::CBody::GetMimeTypeL(const TDesC& aFileName, const TDesC8& aImageData, TDes8& aMimeType)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   116
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   117
	CMmfRecognizerUtil::TMatchLevel matchLevel = EMatchNone;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   118
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   119
	//Get the suffix
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   120
	TParse fileName;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   121
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   122
	// aFileName's length could be greater than KMaxFileName
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   123
	// so don't use TFileName here
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   124
	TPtrC fName(aFileName);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   125
	if (aFileName.Match(_L("::*")) == 0)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   126
 		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   127
		fName.Set(aFileName.Mid(2));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   128
 		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   129
	User::LeaveIfError(fileName.Set(fName, NULL, NULL));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   130
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   131
	HBufC8* fileSuffix = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   132
	if(fileName.ExtPresent())
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   133
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   134
		TPtrC suffixPtr(fileName.Ext());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   135
		fileSuffix = HBufC8::NewLC(suffixPtr.Length());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   136
		fileSuffix->Des().Copy(suffixPtr);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   137
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   138
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   139
	// loop through every supported Format of every controller 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   140
	// until we find one that matches the data header on its own,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   141
	// or the data header plus the file suffix together
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   142
	for (TInt nController = 0, countControllers = iControllers.Count(); nController < countControllers; nController++)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   143
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   144
		CMMFControllerImplementationInformation* controllerImpInfo = iControllers[nController];
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   145
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   146
		for (TInt nPlayFormat = 0, countFormats = controllerImpInfo->PlayFormats().Count(); nPlayFormat < countFormats; nPlayFormat++)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   147
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   148
			const CMMFFormatImplementationInformation* formatImpInfo = 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   149
				controllerImpInfo->PlayFormats()[nPlayFormat];
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   150
			if (formatImpInfo->SupportsHeaderDataL(aImageData))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   151
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   152
				const CDesC8Array& supportedMimeTypes = formatImpInfo->SupportedMimeTypes();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   153
				if (supportedMimeTypes.Count() > 0)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   154
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   155
					CMmfRecognizerUtil::TMatchLevel previousMatchLevel = matchLevel;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   156
					if(fileSuffix && formatImpInfo->SupportsFileExtension(*fileSuffix))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   157
						matchLevel = EMatchName;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   158
					else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   159
						matchLevel = EMatchData;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   160
					// Use first data match but update if suffix match is found
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   161
					if(matchLevel!=previousMatchLevel)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   162
						aMimeType = supportedMimeTypes[0]; // just return the first mime type in the array
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   163
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   164
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   165
			if(matchLevel==EMatchName || (!fileSuffix && matchLevel==EMatchData))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   166
				break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   167
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   168
		if(matchLevel==EMatchName || (!fileSuffix && matchLevel==EMatchData))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   169
			break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   170
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   171
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   172
	if(fileSuffix)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   173
		CleanupStack::PopAndDestroy(fileSuffix);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   174
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   175
	return matchLevel;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   176
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   177
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   178
// Static factory constructor. Uses two phase
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   179
// construction and leaves nothing on the cleanup stack
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   180
// @leave KErrNoMemory
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   181
// @return A pointer to the newly created CMmfRecognizerUtilBody object
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   182
CMmfRecognizerUtil::CBody* CMmfRecognizerUtil::CBody::NewL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   183
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   184
	CBody* self=new (ELeave) CBody();   
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   185
	CleanupStack::PushL(self);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   186
	self->ConstructL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   187
	CleanupStack::Pop(self);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   188
	return self;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   189
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   190
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   191
// Get all the mime types supported by MMF
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   192
// @param	aMimeTypes
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   193
//          A caller-supplied array of descriptors.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   194
// @leave	This method may leave with one of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   195
// @post    The caller's array is filled with the supported MIME types
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   196
void CMmfRecognizerUtil::CBody::GetMimeTypesL(CDesC8Array* aMimeTypes)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   197
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   198
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   199
	CMMFControllerPluginSelectionParameters* cSelect = 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   200
												CMMFControllerPluginSelectionParameters::NewLC();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   201
	CMMFFormatSelectionParameters* fSelect = CMMFFormatSelectionParameters::NewLC();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   202
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   203
	// Set the play format selection parameters to be blank  
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   204
	//  - format support Is only retrieved if requested.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   205
	cSelect->SetRequiredPlayFormatSupportL(*fSelect);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   206
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   207
	// Set the media ids
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   208
	RArray<TUid> mediaIds;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   209
	CleanupClosePushL(mediaIds);	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   210
	User::LeaveIfError(mediaIds.Append(KUidMediaTypeVideo));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   211
	User::LeaveIfError(mediaIds.Append(KUidMediaTypeAudio));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   212
	cSelect->SetMediaIdsL(mediaIds, CMMFPluginSelectionParameters::EAllowOtherMediaIds);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   213
																		   
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   214
	// Array to hold all the controller plugins
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   215
	RMMFControllerImplInfoArray controllers; 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   216
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   217
	CleanupResetAndDestroyPushL(controllers);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   218
	cSelect->ListImplementationsL(controllers);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   219
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   220
	for (TInt nController = 0, controllerCount = controllers.Count(); nController < controllerCount; nController++)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   221
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   222
		for (TInt nPlayFormat = 0, formatCount = controllers[nController]->PlayFormats().Count(); nPlayFormat < formatCount; nPlayFormat++)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   223
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   224
			const CMMFFormatImplementationInformation* formatImpInfo = controllers[nController]->PlayFormats()[nPlayFormat];
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   225
			const CDesC8Array& supportedMimeTypes = formatImpInfo->SupportedMimeTypes();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   226
			for (TInt nMimeType = 0, mimeTypeCount = supportedMimeTypes.Count(); nMimeType < mimeTypeCount; nMimeType++)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   227
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   228
				aMimeTypes->AppendL(supportedMimeTypes[nMimeType]);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   229
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   230
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   231
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   232
					
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   233
	// Clean up
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   234
	CleanupStack::PopAndDestroy(4, cSelect);//controllers, mediaIds, fSelect, cSelect
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   235
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   236
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   237
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   238
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   239
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   240