mmlibs/mmfw/src/ControllerFramework/MMFStandardCustomCommands.cpp
changeset 0 b8ed18f6c07b
equal deleted inserted replaced
-1:000000000000 0:b8ed18f6c07b
       
     1 // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #include <mmf/common/mmfaudio.h>
       
    17 #include "mmfstandardcustomcommands.h"
       
    18 #include "MMFVideoFrameMessage.h"
       
    19 #include "MMFSCCPanicCodes.h"
       
    20 #include <badesca.h>
       
    21 
       
    22 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
       
    23 #include <mmf/common/mmfstandardcustomcommandsenums.h>
       
    24 #include <mmf/common/mmfstandardcustomcommandsimpl.h>
       
    25 #include <mmf/common/mmfvideoenums.h>
       
    26 #endif
       
    27 
       
    28 
       
    29 const TInt KBufExpandSize8 = 8;//two TInts!
       
    30 const TInt KBufExpandSize32 = 32;
       
    31 
       
    32 const TInt KBufMimeTypeGranularity = 4;
       
    33 const TInt KMaxMimeTypeLength = 256;
       
    34 
       
    35 class TMimeTypeBufferInfo 
       
    36 	{
       
    37 public:
       
    38 	TInt32 count;
       
    39 	TInt32 bufferLen;
       
    40 	};
       
    41 
       
    42 EXPORT_C RMMFAudioPlayDeviceCustomCommands::RMMFAudioPlayDeviceCustomCommands(RMMFController& aController) :
       
    43 	RMMFCustomCommandsBase(aController, KUidInterfaceMMFAudioPlayDevice)
       
    44 	{
       
    45 	}
       
    46 
       
    47 EXPORT_C TInt RMMFAudioPlayDeviceCustomCommands::SetVolume(TInt aVolume) const
       
    48 	{
       
    49 	TPckgBuf<TMMFAudioConfig> configPackage;
       
    50 	configPackage().iVolume = aVolume;
       
    51 	return iController.CustomCommandSync(iDestinationPckg, 
       
    52 										 EMMFAudioPlayDeviceSetVolume, 
       
    53 										 configPackage,
       
    54 										 KNullDesC8);
       
    55 	}
       
    56 
       
    57 
       
    58 EXPORT_C TInt RMMFAudioPlayDeviceCustomCommands::GetMaxVolume(TInt& aMaxVolume) const
       
    59 	{
       
    60 	TPckgBuf<TMMFAudioConfig> configPackage;
       
    61 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
    62 												EMMFAudioPlayDeviceGetMaxVolume, 
       
    63 												KNullDesC8,
       
    64 												KNullDesC8,
       
    65 												configPackage);
       
    66 	if (!error)
       
    67 		aMaxVolume = configPackage().iMaxVolume;
       
    68 	return error;
       
    69 	}
       
    70 
       
    71 EXPORT_C TInt RMMFAudioPlayDeviceCustomCommands::GetVolume(TInt& aVolume) const 
       
    72 	{
       
    73 	TPckgBuf<TMMFAudioConfig> configPackage;
       
    74 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
    75 												EMMFAudioPlayDeviceGetVolume, 
       
    76 												KNullDesC8,
       
    77 												KNullDesC8,
       
    78 												configPackage);
       
    79 	if (!error)
       
    80 		aVolume = configPackage().iVolume;
       
    81 	return error;
       
    82 	}
       
    83 
       
    84 EXPORT_C TInt RMMFAudioPlayDeviceCustomCommands::SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration) const
       
    85 	{
       
    86 	TPckgBuf<TMMFAudioConfig> configPackage;
       
    87 	configPackage().iRampDuration = aRampDuration;
       
    88 	return iController.CustomCommandSync(iDestinationPckg, 
       
    89 										 EMMFAudioPlayDeviceSetVolumeRamp, 
       
    90 										 configPackage,
       
    91 										 KNullDesC8);
       
    92 	}
       
    93 
       
    94 EXPORT_C TInt RMMFAudioPlayDeviceCustomCommands::SetBalance(TInt aBalance) const
       
    95 	{
       
    96 	TPckgBuf<TMMFAudioConfig> configPackage;
       
    97 	configPackage().iBalance = aBalance;
       
    98 	return iController.CustomCommandSync(iDestinationPckg, 
       
    99 										 EMMFAudioPlayDeviceSetBalance, 
       
   100 										 configPackage,
       
   101 										 KNullDesC8);
       
   102 	}
       
   103 
       
   104 EXPORT_C TInt RMMFAudioPlayDeviceCustomCommands::GetBalance(TInt& aBalance) const
       
   105 	{
       
   106 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   107 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
   108 												EMMFAudioPlayDeviceGetBalance, 
       
   109 												KNullDesC8,
       
   110 												KNullDesC8,
       
   111 												configPackage);
       
   112 	if (!error)
       
   113 		aBalance = configPackage().iBalance;
       
   114 	return error;
       
   115 	}
       
   116 
       
   117 EXPORT_C CMMFAudioPlayDeviceCustomCommandParser* CMMFAudioPlayDeviceCustomCommandParser::NewL(MMMFAudioPlayDeviceCustomCommandImplementor& aImplementor)
       
   118 	{
       
   119 	return new(ELeave) CMMFAudioPlayDeviceCustomCommandParser(aImplementor);
       
   120 	}
       
   121 
       
   122 EXPORT_C CMMFAudioPlayDeviceCustomCommandParser::~CMMFAudioPlayDeviceCustomCommandParser()
       
   123 	{
       
   124 	}
       
   125 
       
   126 CMMFAudioPlayDeviceCustomCommandParser::CMMFAudioPlayDeviceCustomCommandParser(MMMFAudioPlayDeviceCustomCommandImplementor& aImplementor) : 
       
   127 	CMMFCustomCommandParserBase(KUidInterfaceMMFAudioPlayDevice),
       
   128 	iImplementor(aImplementor)
       
   129 	{
       
   130 	}
       
   131 
       
   132 
       
   133 void CMMFAudioPlayDeviceCustomCommandParser::HandleRequest(TMMFMessage& aMessage)
       
   134 	{
       
   135 	if (aMessage.Destination().InterfaceId() == KUidInterfaceMMFAudioPlayDevice)
       
   136 		{
       
   137 		TRAPD(error, DoHandleRequestL(aMessage));
       
   138 		if (error)
       
   139 			aMessage.Complete(error);
       
   140 		}
       
   141 	else
       
   142 		{
       
   143 		aMessage.Complete(KErrNotSupported);
       
   144 		}
       
   145 	}
       
   146 
       
   147 void CMMFAudioPlayDeviceCustomCommandParser::DoHandleRequestL(TMMFMessage& aMessage)
       
   148 	{
       
   149 	TBool complete = ETrue;
       
   150 	switch (aMessage.Function())
       
   151 		{
       
   152 	case EMMFAudioPlayDeviceSetVolume:
       
   153 		complete = DoSetVolumeL(aMessage);
       
   154 		break;
       
   155 	case EMMFAudioPlayDeviceGetMaxVolume:
       
   156 		complete = DoGetMaxVolumeL(aMessage);
       
   157 		break;
       
   158 	case EMMFAudioPlayDeviceGetVolume:
       
   159 		complete = DoGetVolumeL(aMessage);
       
   160 		break;
       
   161 	case EMMFAudioPlayDeviceSetVolumeRamp:
       
   162 		complete = DoSetVolumeRampL(aMessage);
       
   163 		break;
       
   164 	case EMMFAudioPlayDeviceSetBalance:
       
   165 		complete = DoSetBalanceL(aMessage);
       
   166 		break;
       
   167 	case EMMFAudioPlayDeviceGetBalance:
       
   168 		complete = DoGetBalanceL(aMessage);
       
   169 		break;
       
   170 	default:
       
   171 		User::Leave(KErrNotSupported);
       
   172 		break;
       
   173 		}
       
   174 	if (complete)
       
   175 		aMessage.Complete(KErrNone);
       
   176 	}
       
   177 
       
   178 
       
   179 TBool CMMFAudioPlayDeviceCustomCommandParser::DoSetVolumeL(TMMFMessage& aMessage)
       
   180 	{
       
   181 	TPckgBuf<TMMFAudioConfig> pckg;
       
   182 	aMessage.ReadData1FromClientL(pckg);
       
   183 	iImplementor.MapdSetVolumeL(pckg().iVolume);
       
   184 	return ETrue;
       
   185 	}
       
   186 
       
   187 TBool CMMFAudioPlayDeviceCustomCommandParser::DoGetMaxVolumeL(TMMFMessage& aMessage)
       
   188 	{
       
   189 	TInt maxVol = 0;
       
   190 	iImplementor.MapdGetMaxVolumeL(maxVol);
       
   191 	TPckgBuf<TMMFAudioConfig> pckg;
       
   192 	pckg().iMaxVolume = maxVol;
       
   193 	aMessage.WriteDataToClientL(pckg);
       
   194 	return ETrue;
       
   195 	}
       
   196 
       
   197 TBool CMMFAudioPlayDeviceCustomCommandParser::DoGetVolumeL(TMMFMessage& aMessage)
       
   198 	{
       
   199 	TInt vol = 0;
       
   200 	iImplementor.MapdGetVolumeL(vol);
       
   201 	TPckgBuf<TMMFAudioConfig> pckg;
       
   202 	pckg().iVolume = vol;
       
   203 	aMessage.WriteDataToClientL(pckg);
       
   204 	return ETrue;
       
   205 	}
       
   206 
       
   207 TBool CMMFAudioPlayDeviceCustomCommandParser::DoSetVolumeRampL(TMMFMessage& aMessage)
       
   208 	{
       
   209 	TPckgBuf<TMMFAudioConfig> pckg;
       
   210 	aMessage.ReadData1FromClientL(pckg);
       
   211 	iImplementor.MapdSetVolumeRampL(pckg().iRampDuration);
       
   212 	return ETrue;
       
   213 	}
       
   214 
       
   215 TBool CMMFAudioPlayDeviceCustomCommandParser::DoSetBalanceL(TMMFMessage& aMessage)
       
   216 	{
       
   217 	TPckgBuf<TMMFAudioConfig> pckg;
       
   218 	aMessage.ReadData1FromClientL(pckg);
       
   219 	iImplementor.MapdSetBalanceL(pckg().iBalance);
       
   220 	return ETrue;
       
   221 	}
       
   222 
       
   223 TBool CMMFAudioPlayDeviceCustomCommandParser::DoGetBalanceL(TMMFMessage& aMessage)
       
   224 	{
       
   225 	TInt bal = 0;
       
   226 	iImplementor.MapdGetBalanceL(bal);
       
   227 	TPckgBuf<TMMFAudioConfig> pckg;
       
   228 	pckg().iBalance = bal;
       
   229 	aMessage.WriteDataToClientL(pckg);
       
   230 	return ETrue;
       
   231 	}
       
   232 
       
   233 
       
   234 
       
   235 
       
   236 
       
   237 
       
   238 
       
   239 
       
   240 
       
   241 
       
   242 
       
   243 
       
   244 
       
   245 
       
   246 
       
   247 
       
   248 
       
   249 
       
   250 
       
   251 
       
   252 
       
   253 
       
   254 
       
   255 EXPORT_C RMMFAudioRecordDeviceCustomCommands::RMMFAudioRecordDeviceCustomCommands(RMMFController& aController) :
       
   256 	RMMFCustomCommandsBase(aController, KUidInterfaceMMFAudioRecordDevice)
       
   257 	{
       
   258 	}
       
   259 
       
   260 EXPORT_C TInt RMMFAudioRecordDeviceCustomCommands::SetGain(TInt aGain) const
       
   261 	{
       
   262 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   263 	configPackage().iGain = aGain;
       
   264 	return iController.CustomCommandSync(iDestinationPckg, 
       
   265 										 EMMFAudioRecordDeviceSetGain, 
       
   266 										 configPackage,
       
   267 										 KNullDesC8);
       
   268 	}
       
   269 
       
   270 EXPORT_C TInt RMMFAudioRecordDeviceCustomCommands::GetMaxGain(TInt& aMaxGain) const
       
   271 	{
       
   272 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   273 	TInt error = iController.CustomCommandSync(iDestinationPckg, 
       
   274 										 EMMFAudioRecordDeviceGetMaxGain, 
       
   275 										 KNullDesC8,
       
   276 										 KNullDesC8,
       
   277 										 configPackage);
       
   278 	if (!error)
       
   279 		aMaxGain = configPackage().iMaxGain;
       
   280 	return error;
       
   281 	}
       
   282 
       
   283 EXPORT_C TInt RMMFAudioRecordDeviceCustomCommands::GetGain(TInt& aGain) const
       
   284 	{
       
   285 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   286 	TInt error = iController.CustomCommandSync(iDestinationPckg, 
       
   287 										 EMMFAudioRecordDeviceGetGain, 
       
   288 										 KNullDesC8,
       
   289 										 KNullDesC8,
       
   290 										 configPackage);
       
   291 	if (!error)
       
   292 		aGain = configPackage().iGain;
       
   293 	return error;
       
   294 	}
       
   295 
       
   296 EXPORT_C TInt RMMFAudioRecordDeviceCustomCommands::SetBalance(TInt aBalance) const
       
   297 	{
       
   298 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   299 	configPackage().iBalance = aBalance;
       
   300 	return iController.CustomCommandSync(iDestinationPckg, 
       
   301 										 EMMFAudioRecordDeviceSetBalance, 
       
   302 										 configPackage,
       
   303 										 KNullDesC8);
       
   304 	}
       
   305 
       
   306 EXPORT_C TInt RMMFAudioRecordDeviceCustomCommands::GetBalance(TInt& aBalance) const
       
   307 	{
       
   308 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   309 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
   310 												EMMFAudioRecordDeviceGetBalance, 
       
   311 												KNullDesC8,
       
   312 												KNullDesC8,
       
   313 												configPackage);
       
   314 	if (!error)
       
   315 		aBalance = configPackage().iBalance;
       
   316 	return error;
       
   317 	}
       
   318 
       
   319 EXPORT_C CMMFAudioRecordDeviceCustomCommandParser* CMMFAudioRecordDeviceCustomCommandParser::NewL(MMMFAudioRecordDeviceCustomCommandImplementor& aImplementor) 
       
   320 	{
       
   321 	return new(ELeave) CMMFAudioRecordDeviceCustomCommandParser(aImplementor);
       
   322 	}
       
   323 
       
   324 CMMFAudioRecordDeviceCustomCommandParser::CMMFAudioRecordDeviceCustomCommandParser(MMMFAudioRecordDeviceCustomCommandImplementor& aImplementor) :
       
   325 	CMMFCustomCommandParserBase(KUidInterfaceMMFAudioRecordDevice),
       
   326 	iImplementor(aImplementor)
       
   327 	{
       
   328 	}
       
   329 
       
   330 EXPORT_C CMMFAudioRecordDeviceCustomCommandParser::~CMMFAudioRecordDeviceCustomCommandParser()
       
   331 	{
       
   332 	}
       
   333 
       
   334 void CMMFAudioRecordDeviceCustomCommandParser::HandleRequest(TMMFMessage& aMessage)
       
   335 	{
       
   336 	if (aMessage.Destination().InterfaceId() == KUidInterfaceMMFAudioRecordDevice)
       
   337 		{
       
   338 		TRAPD(error, DoHandleRequestL(aMessage));
       
   339 		if (error)
       
   340 			aMessage.Complete(error);
       
   341 		}
       
   342 	else
       
   343 		{
       
   344 		aMessage.Complete(KErrNotSupported);
       
   345 		}
       
   346 	}
       
   347 
       
   348 void CMMFAudioRecordDeviceCustomCommandParser::DoHandleRequestL(TMMFMessage& aMessage)
       
   349 	{
       
   350 	TBool complete = ETrue;
       
   351 	switch (aMessage.Function())
       
   352 		{
       
   353 	case EMMFAudioRecordDeviceSetGain:
       
   354 		complete = DoSetGainL(aMessage);
       
   355 		break;
       
   356 	case EMMFAudioRecordDeviceGetMaxGain:
       
   357 		complete = DoGetMaxGainL(aMessage);
       
   358 		break;
       
   359 	case EMMFAudioRecordDeviceGetGain:
       
   360 		complete = DoGetGainL(aMessage);
       
   361 		break;
       
   362 	case EMMFAudioRecordDeviceSetBalance:
       
   363 		complete = DoSetBalanceL(aMessage);
       
   364 		break;
       
   365 	case EMMFAudioRecordDeviceGetBalance:
       
   366 		complete = DoGetBalanceL(aMessage);
       
   367 		break;
       
   368 	default:
       
   369 		User::Leave(KErrNotSupported);
       
   370 		break;
       
   371 		}
       
   372 	if (complete)
       
   373 		aMessage.Complete(KErrNone);
       
   374 	}
       
   375 
       
   376 TBool CMMFAudioRecordDeviceCustomCommandParser::DoSetGainL(TMMFMessage& aMessage)
       
   377 	{
       
   378 	TPckgBuf<TMMFAudioConfig> pckg;
       
   379 	aMessage.ReadData1FromClientL(pckg);
       
   380 	iImplementor.MardSetGainL(pckg().iGain);
       
   381 	return ETrue;
       
   382 	}
       
   383 
       
   384 TBool CMMFAudioRecordDeviceCustomCommandParser::DoGetMaxGainL(TMMFMessage& aMessage)
       
   385 	{
       
   386 	TInt maxGain = 0;
       
   387 	iImplementor.MardGetMaxGainL(maxGain);
       
   388 	TPckgBuf<TMMFAudioConfig> pckg;
       
   389 	pckg().iMaxGain = maxGain;
       
   390 	aMessage.WriteDataToClientL(pckg);
       
   391 	return ETrue;
       
   392 	}
       
   393 
       
   394 TBool CMMFAudioRecordDeviceCustomCommandParser::DoGetGainL(TMMFMessage& aMessage)
       
   395 	{
       
   396 	TInt gain = 0;
       
   397 	iImplementor.MardGetGainL(gain);
       
   398 	TPckgBuf<TMMFAudioConfig> pckg;
       
   399 	pckg().iGain = gain;
       
   400 	aMessage.WriteDataToClientL(pckg);
       
   401 	return ETrue;
       
   402 	}
       
   403 
       
   404 TBool CMMFAudioRecordDeviceCustomCommandParser::DoSetBalanceL(TMMFMessage& aMessage)
       
   405 	{
       
   406 	TPckgBuf<TMMFAudioConfig> pckg;
       
   407 	aMessage.ReadData1FromClientL(pckg);
       
   408 	iImplementor.MardSetBalanceL(pckg().iBalance);
       
   409 	return ETrue;
       
   410 	}
       
   411 
       
   412 TBool CMMFAudioRecordDeviceCustomCommandParser::DoGetBalanceL(TMMFMessage& aMessage)
       
   413 	{
       
   414 	TInt balance = 0;
       
   415 	iImplementor.MardGetBalanceL(balance);
       
   416 	TPckgBuf<TMMFAudioConfig> pckg;
       
   417 	pckg().iBalance = balance;
       
   418 	aMessage.WriteDataToClientL(pckg);
       
   419 	return ETrue;
       
   420 	}
       
   421 
       
   422 
       
   423 
       
   424 
       
   425 
       
   426 
       
   427 
       
   428 
       
   429 
       
   430 
       
   431 
       
   432 
       
   433 
       
   434 
       
   435 
       
   436 
       
   437 
       
   438 
       
   439 
       
   440 
       
   441 
       
   442 EXPORT_C RMMFAudioPlayControllerCustomCommands::RMMFAudioPlayControllerCustomCommands(RMMFController& aController) :
       
   443 	RMMFCustomCommandsBase(aController, KUidInterfaceMMFAudioPlayController)
       
   444 	{
       
   445 	}
       
   446 
       
   447 EXPORT_C TInt RMMFAudioPlayControllerCustomCommands::SetPlaybackWindow(const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd) const
       
   448 	{
       
   449 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   450 	configPackage().iStartPosition = aStart;
       
   451 	configPackage().iEndPosition = aEnd;
       
   452 	return iController.CustomCommandSync(iDestinationPckg, 
       
   453 										 EMMFAudioPlayControllerSetPlaybackWindow, 
       
   454 										 configPackage,
       
   455 										 KNullDesC8);
       
   456 	}
       
   457 
       
   458 
       
   459 EXPORT_C TInt RMMFAudioPlayControllerCustomCommands::DeletePlaybackWindow()
       
   460 	{
       
   461 	return iController.CustomCommandSync(iDestinationPckg, 
       
   462 										 EMMFAudioPlayControllerDeletePlaybackWindow, 
       
   463 										 KNullDesC8,
       
   464 										 KNullDesC8);
       
   465 	}
       
   466 	
       
   467 EXPORT_C TInt RMMFAudioPlayControllerCustomCommands::GetLoadingProgress(TInt& aPercentageComplete) const
       
   468 	{
       
   469 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   470 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
   471 												EMMFAudioPlayControllerGetLoadingProgress, 
       
   472 												KNullDesC8,
       
   473 												KNullDesC8,
       
   474 												configPackage);
       
   475 	if (!error)
       
   476 		aPercentageComplete = configPackage().iLoadingCompletePercentage;
       
   477 	return error;
       
   478 	}
       
   479 
       
   480 
       
   481 
       
   482 EXPORT_C CMMFAudioPlayControllerCustomCommandParser* CMMFAudioPlayControllerCustomCommandParser::NewL(MMMFAudioPlayControllerCustomCommandImplementor& aImplementor)
       
   483 	{
       
   484 	return new(ELeave) CMMFAudioPlayControllerCustomCommandParser(aImplementor);
       
   485 	}
       
   486 
       
   487 CMMFAudioPlayControllerCustomCommandParser::CMMFAudioPlayControllerCustomCommandParser(MMMFAudioPlayControllerCustomCommandImplementor& aImplementor) :
       
   488 	CMMFCustomCommandParserBase(KUidInterfaceMMFAudioPlayController),
       
   489 	iImplementor(aImplementor)
       
   490 	{
       
   491 	}
       
   492 
       
   493 EXPORT_C CMMFAudioPlayControllerCustomCommandParser::~CMMFAudioPlayControllerCustomCommandParser()
       
   494 	{
       
   495 	}
       
   496 
       
   497 void CMMFAudioPlayControllerCustomCommandParser::HandleRequest(TMMFMessage& aMessage)
       
   498 	{
       
   499 	if (aMessage.Destination().InterfaceId() == KUidInterfaceMMFAudioPlayController)
       
   500 		{
       
   501 		TRAPD(error, DoHandleRequestL(aMessage));
       
   502 		if (error)
       
   503 			aMessage.Complete(error);
       
   504 		}
       
   505 	else
       
   506 		{
       
   507 		aMessage.Complete(KErrNotSupported);
       
   508 		}
       
   509 	}
       
   510 
       
   511 void CMMFAudioPlayControllerCustomCommandParser::DoHandleRequestL(TMMFMessage& aMessage)
       
   512 	{
       
   513 	TBool complete = ETrue;
       
   514 	switch (aMessage.Function())
       
   515 		{
       
   516 	case EMMFAudioPlayControllerSetPlaybackWindow:
       
   517 		complete = DoSetPlaybackWindowL(aMessage);
       
   518 		break;
       
   519 	case EMMFAudioPlayControllerDeletePlaybackWindow:
       
   520 		complete = DoDeletePlaybackWindowL(aMessage);
       
   521 		break;
       
   522 	case EMMFAudioPlayControllerGetLoadingProgress:
       
   523 		complete = DoGetLoadingProgressL(aMessage);
       
   524 		break;
       
   525 	default:
       
   526 		User::Leave(KErrNotSupported);
       
   527 		break;
       
   528 		}
       
   529 	if (complete)
       
   530 		aMessage.Complete(KErrNone);
       
   531 	}
       
   532 
       
   533 TBool CMMFAudioPlayControllerCustomCommandParser::DoSetPlaybackWindowL(TMMFMessage& aMessage)
       
   534 	{
       
   535 	TPckgBuf<TMMFAudioConfig> pckg;
       
   536 	aMessage.ReadData1FromClientL(pckg);
       
   537 	iImplementor.MapcSetPlaybackWindowL(pckg().iStartPosition, pckg().iEndPosition);
       
   538 	return ETrue;
       
   539 	}
       
   540 
       
   541 TBool CMMFAudioPlayControllerCustomCommandParser::DoDeletePlaybackWindowL(TMMFMessage& /*aMessage*/)
       
   542 	{
       
   543 	iImplementor.MapcDeletePlaybackWindowL();
       
   544 	return ETrue;
       
   545 	}
       
   546 
       
   547 TBool CMMFAudioPlayControllerCustomCommandParser::DoGetLoadingProgressL(TMMFMessage& aMessage)
       
   548 	{
       
   549 	TInt progress;
       
   550 	iImplementor.MapcGetLoadingProgressL(progress);
       
   551 	TPckgBuf<TMMFAudioConfig> pckg;
       
   552 	pckg().iLoadingCompletePercentage = progress;
       
   553 	aMessage.WriteDataToClientL(pckg);
       
   554 	return ETrue;
       
   555 	}
       
   556 
       
   557 
       
   558 
       
   559 
       
   560 
       
   561 
       
   562 
       
   563 
       
   564 
       
   565 
       
   566 
       
   567 EXPORT_C RMMFAudioRecordControllerCustomCommands::RMMFAudioRecordControllerCustomCommands(RMMFController& aController) :
       
   568 	RMMFCustomCommandsBase(aController, KUidInterfaceMMFAudioRecordController)
       
   569 	{
       
   570 	}
       
   571 
       
   572 EXPORT_C TInt RMMFAudioRecordControllerCustomCommands::GetRecordTimeAvailable(TTimeIntervalMicroSeconds& aTime) const
       
   573 	{
       
   574 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   575 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
   576 												EMMFAudioRecordControllerGetRecordTimeAvailable, 
       
   577 												KNullDesC8,
       
   578 												KNullDesC8,
       
   579 												configPackage);
       
   580 	if (!error)
       
   581 		aTime = configPackage().iRecordTimeAvailable;
       
   582 	return error;
       
   583 	}
       
   584 
       
   585 EXPORT_C TInt RMMFAudioRecordControllerCustomCommands::SetMaxDuration(const TTimeIntervalMicroSeconds& aMaxDuration) const
       
   586 	{
       
   587 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   588 	configPackage().iMaxDuration = aMaxDuration;
       
   589 	return iController.CustomCommandSync(iDestinationPckg, 
       
   590 										 EMMFAudioRecordControllerSetMaxDuration, 
       
   591 										 configPackage,
       
   592 										 KNullDesC8);
       
   593 	}
       
   594 
       
   595 EXPORT_C TInt RMMFAudioRecordControllerCustomCommands::SetMaxFileSize(TInt aMaxSize) const
       
   596 	{
       
   597 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   598 	configPackage().iMaxFileSize = aMaxSize;
       
   599 	return iController.CustomCommandSync(iDestinationPckg, 
       
   600 										 EMMFAudioRecordControllerSetMaxFileSize, 
       
   601 										 configPackage,
       
   602 										 KNullDesC8);
       
   603 	}
       
   604 
       
   605 EXPORT_C TInt RMMFAudioRecordControllerCustomCommands::Crop(TBool aToEnd)
       
   606 	{
       
   607 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   608 	configPackage().iCropToEnd = aToEnd;
       
   609 	return iController.CustomCommandSync(iDestinationPckg, 
       
   610 										 EMMFAudioRecordControllerCrop, 
       
   611 										 configPackage,
       
   612 										 KNullDesC8);
       
   613 	}
       
   614 
       
   615 EXPORT_C void RMMFAudioRecordControllerCustomCommands::AddMetaDataEntryL(const CMMFMetaDataEntry& aNewEntry)
       
   616 	{
       
   617 	CBufFlat* buf = CBufFlat::NewL(KBufExpandSize32);
       
   618 	CleanupStack::PushL(buf);
       
   619 	RBufWriteStream s;
       
   620 	s.Open(*buf);
       
   621 	CleanupClosePushL(s);
       
   622 	aNewEntry.ExternalizeL(s);
       
   623 	TPtr8 bufData = buf->Ptr(0);
       
   624 	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg,
       
   625 													 EMMFAudioRecordControllerAddMetaDataEntry,
       
   626 													 bufData,
       
   627 													 KNullDesC8));
       
   628 	CleanupStack::PopAndDestroy(2);//s, buf
       
   629 	}
       
   630 
       
   631 EXPORT_C TInt RMMFAudioRecordControllerCustomCommands::RemoveMetaDataEntry(TInt aIndex)
       
   632 	{
       
   633 	TPckgBuf<TInt> pckg(aIndex);
       
   634 	return iController.CustomCommandSync(iDestinationPckg,
       
   635 										 EMMFAudioRecordControllerRemoveMetaDataEntry,
       
   636 										 pckg,
       
   637 										 KNullDesC8);
       
   638 	}
       
   639 
       
   640 EXPORT_C void RMMFAudioRecordControllerCustomCommands::ReplaceMetaDataEntryL(TInt aIndex, const CMMFMetaDataEntry& aNewEntry)
       
   641 	{
       
   642 	TPckgBuf<TInt> indexPckg(aIndex);
       
   643 	CBufFlat* buf = CBufFlat::NewL(KBufExpandSize32);
       
   644 	CleanupStack::PushL(buf);
       
   645 	RBufWriteStream s;
       
   646 	s.Open(*buf);
       
   647 	CleanupClosePushL(s);
       
   648 	aNewEntry.ExternalizeL(s);
       
   649 	TPtr8 bufData = buf->Ptr(0);
       
   650 	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg,
       
   651 													 EMMFAudioRecordControllerReplaceMetaDataEntry,
       
   652 													 bufData,
       
   653 													 indexPckg));
       
   654 	CleanupStack::PopAndDestroy(2);//s, buf
       
   655 	}
       
   656 
       
   657 EXPORT_C CMMFAudioRecordControllerCustomCommandParser* CMMFAudioRecordControllerCustomCommandParser::NewL(MMMFAudioRecordControllerCustomCommandImplementor& aImplementor)
       
   658 	{
       
   659 	return new(ELeave) CMMFAudioRecordControllerCustomCommandParser(aImplementor);
       
   660 	}
       
   661 
       
   662 CMMFAudioRecordControllerCustomCommandParser::CMMFAudioRecordControllerCustomCommandParser(MMMFAudioRecordControllerCustomCommandImplementor& aImplementor) :
       
   663 	CMMFCustomCommandParserBase(KUidInterfaceMMFAudioRecordController),
       
   664 	iImplementor(aImplementor)
       
   665 	{
       
   666 	}
       
   667 
       
   668 EXPORT_C CMMFAudioRecordControllerCustomCommandParser::~CMMFAudioRecordControllerCustomCommandParser()
       
   669 	{
       
   670 	}
       
   671 
       
   672 void CMMFAudioRecordControllerCustomCommandParser::HandleRequest(TMMFMessage& aMessage)
       
   673 	{
       
   674 	if (aMessage.Destination().InterfaceId() == KUidInterfaceMMFAudioRecordController)
       
   675 		{
       
   676 		TRAPD(error, DoHandleRequestL(aMessage));
       
   677 		if (error)
       
   678 			aMessage.Complete(error);
       
   679 		}
       
   680 	else
       
   681 		{
       
   682 		aMessage.Complete(KErrNotSupported);
       
   683 		}
       
   684 	}
       
   685 
       
   686 void CMMFAudioRecordControllerCustomCommandParser::DoHandleRequestL(TMMFMessage& aMessage)
       
   687 	{
       
   688 	TBool complete = ETrue;
       
   689 	switch (aMessage.Function())
       
   690 		{
       
   691 	case EMMFAudioRecordControllerGetRecordTimeAvailable:
       
   692 		complete = DoGetRecordTimeAvailableL(aMessage);
       
   693 		break;
       
   694 	case EMMFAudioRecordControllerSetMaxDuration:
       
   695 		complete = DoSetMaxDurationL(aMessage);
       
   696 		break;
       
   697 	case EMMFAudioRecordControllerSetMaxFileSize:
       
   698 		complete = DoSetMaxFileSizeL(aMessage);
       
   699 		break;
       
   700 	case EMMFAudioRecordControllerCrop:
       
   701 		complete = DoCropL(aMessage);
       
   702 		break;
       
   703 	case EMMFAudioRecordControllerAddMetaDataEntry:
       
   704 		complete = DoAddMetaDataEntryL(aMessage);
       
   705 		break;
       
   706 	case EMMFAudioRecordControllerRemoveMetaDataEntry:
       
   707 		complete = DoRemoveMetaDataEntryL(aMessage);
       
   708 		break;
       
   709 	case EMMFAudioRecordControllerReplaceMetaDataEntry:
       
   710 		complete = DoReplaceMetaDataEntryL(aMessage);
       
   711 		break;
       
   712 	default:
       
   713 		User::Leave(KErrNotSupported);
       
   714 		break;
       
   715 		}
       
   716 	if (complete)
       
   717 		aMessage.Complete(KErrNone);
       
   718 	}
       
   719 
       
   720 TBool CMMFAudioRecordControllerCustomCommandParser::DoGetRecordTimeAvailableL(TMMFMessage& aMessage)
       
   721 	{
       
   722 	TTimeIntervalMicroSeconds time;
       
   723 	iImplementor.MarcGetRecordTimeAvailableL(time);
       
   724 	TPckgBuf<TMMFAudioConfig> pckg;
       
   725 	pckg().iRecordTimeAvailable = time;
       
   726 	aMessage.WriteDataToClientL(pckg);
       
   727 	return ETrue;
       
   728 	}
       
   729 
       
   730 TBool CMMFAudioRecordControllerCustomCommandParser::DoSetMaxDurationL(TMMFMessage& aMessage)
       
   731 	{
       
   732 	TPckgBuf<TMMFAudioConfig> pckg;
       
   733 	aMessage.ReadData1FromClientL(pckg);
       
   734 	iImplementor.MarcSetMaxDurationL(pckg().iMaxDuration);
       
   735 	return ETrue;
       
   736 	}
       
   737 
       
   738 TBool CMMFAudioRecordControllerCustomCommandParser::DoSetMaxFileSizeL(TMMFMessage& aMessage)
       
   739 	{
       
   740 	TPckgBuf<TMMFAudioConfig> pckg;
       
   741 	aMessage.ReadData1FromClientL(pckg);
       
   742 	iImplementor.MarcSetMaxFileSizeL(pckg().iMaxFileSize);
       
   743 	return ETrue;
       
   744 	}
       
   745 
       
   746 TBool CMMFAudioRecordControllerCustomCommandParser::DoCropL(TMMFMessage& aMessage)
       
   747 	{
       
   748 	TPckgBuf<TMMFAudioConfig> pckg;
       
   749 	aMessage.ReadData1FromClientL(pckg);
       
   750 	iImplementor.MarcCropL(pckg().iCropToEnd);
       
   751 	return ETrue;
       
   752 	}
       
   753 
       
   754 TBool CMMFAudioRecordControllerCustomCommandParser::DoAddMetaDataEntryL(TMMFMessage& aMessage)
       
   755 	{
       
   756 	TInt bufSize = aMessage.SizeOfData1FromClient();
       
   757 	// Leaving here in order to prevent a panic in the NewLC if the value is negative
       
   758 	User::LeaveIfError(bufSize); 
       
   759 	HBufC8* buf = HBufC8::NewLC(bufSize);
       
   760 	TPtr8 ptr = buf->Des();
       
   761 	aMessage.ReadData1FromClientL(ptr);
       
   762 	RDesReadStream stream;
       
   763 	stream.Open(ptr);
       
   764 	CleanupClosePushL(stream);
       
   765 	CMMFMetaDataEntry* metaData = CMMFMetaDataEntry::NewL();
       
   766 	CleanupStack::PushL(metaData);
       
   767 	metaData->InternalizeL(stream);
       
   768 	iImplementor.MarcAddMetaDataEntryL(*metaData);
       
   769 	CleanupStack::PopAndDestroy(3);//metaData, stream, buf
       
   770 	return ETrue;
       
   771 	}
       
   772 
       
   773 TBool CMMFAudioRecordControllerCustomCommandParser::DoRemoveMetaDataEntryL(TMMFMessage& aMessage)
       
   774 	{
       
   775 	TPckgBuf<TInt> pckg;
       
   776 	aMessage.ReadData1FromClientL(pckg);
       
   777 	iImplementor.MarcRemoveMetaDataEntryL(pckg());
       
   778 	return ETrue;
       
   779 	}
       
   780 
       
   781 TBool CMMFAudioRecordControllerCustomCommandParser::DoReplaceMetaDataEntryL(TMMFMessage& aMessage)
       
   782 	{
       
   783 	// Get new meta data
       
   784 	TInt bufSize = aMessage.SizeOfData1FromClient();
       
   785 	// Leaving here in order to prevent a panic in the NewLC if the value is negative
       
   786 	User::LeaveIfError(bufSize); 
       
   787 	HBufC8* buf = HBufC8::NewLC(bufSize);
       
   788 	TPtr8 ptr = buf->Des();
       
   789 	aMessage.ReadData1FromClientL(ptr);
       
   790 	RDesReadStream stream;
       
   791 	stream.Open(ptr);
       
   792 	CleanupClosePushL(stream);
       
   793 	CMMFMetaDataEntry* metaData = CMMFMetaDataEntry::NewL();
       
   794 	CleanupStack::PushL(metaData);
       
   795 	metaData->InternalizeL(stream);
       
   796 
       
   797 	
       
   798 	// Get index to replace
       
   799 	TPckgBuf<TInt> indexPckg;
       
   800 	aMessage.ReadData2FromClientL(indexPckg);
       
   801 	
       
   802 	iImplementor.MarcReplaceMetaDataEntryL(indexPckg(), *metaData);
       
   803 
       
   804 	CleanupStack::PopAndDestroy(3);//metaData, stream, buf
       
   805 	return ETrue;
       
   806 	}
       
   807 
       
   808 
       
   809 
       
   810 
       
   811 
       
   812 
       
   813 
       
   814 
       
   815 
       
   816 
       
   817 
       
   818 
       
   819 
       
   820 
       
   821 
       
   822 
       
   823 
       
   824 EXPORT_C RMMFAudioControllerCustomCommands::RMMFAudioControllerCustomCommands(RMMFController& aController) :
       
   825 	RMMFCustomCommandsBase(aController, KUidInterfaceMMFAudioController)
       
   826 	{
       
   827 	}
       
   828 
       
   829 EXPORT_C TInt RMMFAudioControllerCustomCommands::SetSourceSampleRate(TUint aSampleRate) const
       
   830 	{
       
   831 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   832 	configPackage().iSampleRate = aSampleRate;
       
   833 	return iController.CustomCommandSync(iDestinationPckg, 
       
   834 										 EMMFAudioControllerSetSourceSampleRate, 
       
   835 										 configPackage,
       
   836 										 KNullDesC8);
       
   837 	}
       
   838 
       
   839 EXPORT_C TInt RMMFAudioControllerCustomCommands::SetSourceNumChannels(TUint aNumChannels) const
       
   840 	{
       
   841 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   842 	configPackage().iChannels = aNumChannels;
       
   843 	return iController.CustomCommandSync(iDestinationPckg, 
       
   844 										 EMMFAudioControllerSetSourceNumChannels, 
       
   845 										 configPackage,
       
   846 										 KNullDesC8);
       
   847 	}
       
   848 
       
   849 EXPORT_C TInt RMMFAudioControllerCustomCommands::SetSourceFormat(TUid aFormatUid) const
       
   850 	{
       
   851 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   852 	configPackage().iFormatUid = aFormatUid;
       
   853 	return iController.CustomCommandSync(iDestinationPckg, 
       
   854 										 EMMFAudioControllerSetSourceFormat, 
       
   855 										 configPackage,
       
   856 										 KNullDesC8);
       
   857 	}
       
   858 
       
   859 EXPORT_C TInt RMMFAudioControllerCustomCommands::SetSinkSampleRate(TUint aSampleRate) const
       
   860 	{
       
   861 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   862 	configPackage().iSampleRate = aSampleRate;
       
   863 	return iController.CustomCommandSync(iDestinationPckg, 
       
   864 										 EMMFAudioControllerSetSinkSampleRate, 
       
   865 										 configPackage,
       
   866 										 KNullDesC8);
       
   867 	}
       
   868 
       
   869 EXPORT_C TInt RMMFAudioControllerCustomCommands::SetSinkNumChannels(TUint aNumChannels) const
       
   870 	{
       
   871 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   872 	configPackage().iChannels = aNumChannels;
       
   873 	return iController.CustomCommandSync(iDestinationPckg, 
       
   874 										 EMMFAudioControllerSetSinkNumChannels, 
       
   875 										 configPackage,
       
   876 										 KNullDesC8);
       
   877 	}
       
   878 
       
   879 EXPORT_C TInt RMMFAudioControllerCustomCommands::SetSinkFormat(TUid aFormatUid) const
       
   880 	{
       
   881 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   882 	configPackage().iFormatUid = aFormatUid;
       
   883 	return iController.CustomCommandSync(iDestinationPckg, 
       
   884 										 EMMFAudioControllerSetSinkFormat, 
       
   885 										 configPackage,
       
   886 										 KNullDesC8);
       
   887 	}
       
   888 
       
   889 EXPORT_C TInt RMMFAudioControllerCustomCommands::SetCodec(TFourCC aSourceDataType, TFourCC aSinkDataType) const
       
   890 	{
       
   891 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   892 	configPackage().iSourceDataTypeCode = aSourceDataType;
       
   893 	configPackage().iSinkDataTypeCode = aSinkDataType;
       
   894 	return iController.CustomCommandSync(iDestinationPckg, 
       
   895 										 EMMFAudioControllerSetCodec, 
       
   896 										 configPackage,
       
   897 										 KNullDesC8);
       
   898 	}
       
   899 
       
   900 
       
   901 
       
   902 EXPORT_C TInt RMMFAudioControllerCustomCommands::SetSourceBitRate(TUint aRate) const
       
   903 	{
       
   904 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   905 	configPackage().iSampleRate = aRate;
       
   906 	return iController.CustomCommandSync(iDestinationPckg, 
       
   907 										 EMMFAudioControllerSetSourceBitRate, 
       
   908 										 configPackage,
       
   909 										 KNullDesC8);
       
   910 	}
       
   911 
       
   912 EXPORT_C TInt RMMFAudioControllerCustomCommands::SetSourceDataType(TFourCC aDataType) const
       
   913 	{
       
   914 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   915 	configPackage().iSourceDataTypeCode = aDataType;
       
   916 	return iController.CustomCommandSync(iDestinationPckg, 
       
   917 										 EMMFAudioControllerSetSourceDataType, 
       
   918 										 configPackage,
       
   919 										 KNullDesC8);
       
   920 	}
       
   921 
       
   922 EXPORT_C TInt RMMFAudioControllerCustomCommands::SetSinkBitRate(TUint aRate) const
       
   923 	{
       
   924 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   925 	configPackage().iSampleRate = aRate;
       
   926 	return iController.CustomCommandSync(iDestinationPckg, 
       
   927 										 EMMFAudioControllerSetSinkBitRate, 
       
   928 										 configPackage,
       
   929 										 KNullDesC8);
       
   930 	}
       
   931 
       
   932 EXPORT_C TInt RMMFAudioControllerCustomCommands::SetSinkDataType(TFourCC aDataType) const
       
   933 	{
       
   934 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   935 	configPackage().iSinkDataTypeCode = aDataType;
       
   936 	return iController.CustomCommandSync(iDestinationPckg, 
       
   937 										 EMMFAudioControllerSetSinkDataType, 
       
   938 										 configPackage,
       
   939 										 KNullDesC8);
       
   940 	}
       
   941 
       
   942 EXPORT_C TInt RMMFAudioControllerCustomCommands::GetSourceSampleRate(TUint& aRate) const
       
   943 	{
       
   944 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   945 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
   946 												EMMFAudioControllerGetSourceSampleRate, 
       
   947 												KNullDesC8,
       
   948 												KNullDesC8,
       
   949 												configPackage);
       
   950 	if (!error)
       
   951 		aRate = configPackage().iSampleRate;
       
   952 	return error;
       
   953 	}
       
   954 
       
   955 EXPORT_C TInt RMMFAudioControllerCustomCommands::GetSourceBitRate(TUint& aRate) const
       
   956 	{
       
   957 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   958 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
   959 												EMMFAudioControllerGetSourceBitRate, 
       
   960 												KNullDesC8,
       
   961 												KNullDesC8,
       
   962 												configPackage);
       
   963 	if (!error)
       
   964 		aRate = configPackage().iSampleRate;
       
   965 	return error;
       
   966 	}
       
   967 
       
   968 EXPORT_C TInt RMMFAudioControllerCustomCommands::GetSourceNumChannels(TUint& aNumChannels) const
       
   969 	{
       
   970 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   971 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
   972 												EMMFAudioControllerGetSourceNumChannels, 
       
   973 												KNullDesC8,
       
   974 												KNullDesC8,
       
   975 												configPackage);
       
   976 	if (!error)
       
   977 		aNumChannels = configPackage().iChannels;
       
   978 	return error;
       
   979 	}
       
   980 
       
   981 EXPORT_C TInt RMMFAudioControllerCustomCommands::GetSourceFormat(TUid& aFormat) const
       
   982 	{
       
   983 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   984 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
   985 												EMMFAudioControllerGetSourceFormat, 
       
   986 												KNullDesC8,
       
   987 												KNullDesC8,
       
   988 												configPackage);
       
   989 	if (!error)
       
   990 		aFormat = configPackage().iFormatUid;
       
   991 	return error;
       
   992 	}
       
   993 
       
   994 EXPORT_C TInt RMMFAudioControllerCustomCommands::GetSourceDataType(TFourCC& aDataType) const
       
   995 	{
       
   996 	TPckgBuf<TMMFAudioConfig> configPackage;
       
   997 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
   998 												EMMFAudioControllerGetSourceDataType, 
       
   999 												KNullDesC8,
       
  1000 												KNullDesC8,
       
  1001 												configPackage);
       
  1002 	if (!error)
       
  1003 		aDataType = configPackage().iSourceDataTypeCode;
       
  1004 	return error;
       
  1005 	}
       
  1006 
       
  1007 EXPORT_C TInt RMMFAudioControllerCustomCommands::GetSinkSampleRate(TUint& aRate) const
       
  1008 	{
       
  1009 	TPckgBuf<TMMFAudioConfig> configPackage;
       
  1010 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
  1011 												EMMFAudioControllerGetSinkSampleRate, 
       
  1012 												KNullDesC8,
       
  1013 												KNullDesC8,
       
  1014 												configPackage);
       
  1015 	if (!error)
       
  1016 		aRate = configPackage().iSampleRate;
       
  1017 	return error;
       
  1018 	}
       
  1019 
       
  1020 EXPORT_C TInt RMMFAudioControllerCustomCommands::GetSinkBitRate(TUint& aRate) const
       
  1021 	{
       
  1022 	TPckgBuf<TMMFAudioConfig> configPackage;
       
  1023 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
  1024 												EMMFAudioControllerGetSinkBitRate, 
       
  1025 												KNullDesC8,
       
  1026 												KNullDesC8,
       
  1027 												configPackage);
       
  1028 	if (!error)
       
  1029 		aRate = configPackage().iSampleRate;
       
  1030 	return error;
       
  1031 	}
       
  1032 
       
  1033 EXPORT_C TInt RMMFAudioControllerCustomCommands::GetSinkNumChannels(TUint& aNumChannels) const
       
  1034 	{
       
  1035 	TPckgBuf<TMMFAudioConfig> configPackage;
       
  1036 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
  1037 												EMMFAudioControllerGetSinkNumChannels, 
       
  1038 												KNullDesC8,
       
  1039 												KNullDesC8,
       
  1040 												configPackage);
       
  1041 	if (!error)
       
  1042 		aNumChannels = configPackage().iChannels;
       
  1043 	return error;
       
  1044 	}
       
  1045 
       
  1046 EXPORT_C TInt RMMFAudioControllerCustomCommands::GetSinkFormat(TUid& aFormat) const
       
  1047 	{
       
  1048 	TPckgBuf<TMMFAudioConfig> configPackage;
       
  1049 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
  1050 												EMMFAudioControllerGetSinkFormat, 
       
  1051 												KNullDesC8,
       
  1052 												KNullDesC8,
       
  1053 												configPackage);
       
  1054 	if (!error)
       
  1055 		aFormat = configPackage().iFormatUid;
       
  1056 	return error;
       
  1057 	}
       
  1058 
       
  1059 EXPORT_C TInt RMMFAudioControllerCustomCommands::GetSinkDataType(TFourCC& aDataType) const
       
  1060 	{
       
  1061 	TPckgBuf<TMMFAudioConfig> configPackage;
       
  1062 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
  1063 												EMMFAudioControllerGetSinkDataType, 
       
  1064 												KNullDesC8,
       
  1065 												KNullDesC8,
       
  1066 												configPackage);
       
  1067 	if (!error)
       
  1068 		aDataType = configPackage().iSinkDataTypeCode;
       
  1069 	return error;
       
  1070 	}
       
  1071 
       
  1072 EXPORT_C void RMMFAudioControllerCustomCommands::GetSupportedSourceSampleRatesL(RArray<TUint>& aSupportedRates) const
       
  1073 	{
       
  1074 	DoGetUintArrayL(aSupportedRates, EMMFAudioControllerGetSupportedSourceSampleRates);
       
  1075 	}
       
  1076 
       
  1077 EXPORT_C void RMMFAudioControllerCustomCommands::GetSupportedSourceBitRatesL(RArray<TUint>& aSupportedRates) const
       
  1078 	{
       
  1079 	DoGetUintArrayL(aSupportedRates, EMMFAudioControllerGetSupportedSourceBitRates);
       
  1080 	}
       
  1081 
       
  1082 EXPORT_C void RMMFAudioControllerCustomCommands::GetSupportedSourceNumChannelsL(RArray<TUint>& aSupportedChannels) const
       
  1083 	{
       
  1084 	DoGetUintArrayL(aSupportedChannels, EMMFAudioControllerGetSupportedSourceNumChannels);
       
  1085 	}
       
  1086 
       
  1087 EXPORT_C void RMMFAudioControllerCustomCommands::GetSupportedSourceDataTypesL(RArray<TFourCC>& aSupportedDataTypes) const
       
  1088 	{
       
  1089 	DoGetFourCCArrayL(aSupportedDataTypes, EMMFAudioControllerGetSupportedSourceDataTypes);
       
  1090 	}
       
  1091 
       
  1092 EXPORT_C void RMMFAudioControllerCustomCommands::GetSupportedSinkSampleRatesL(RArray<TUint>& aSupportedRates) const
       
  1093 	{
       
  1094 	DoGetUintArrayL(aSupportedRates, EMMFAudioControllerGetSupportedSinkSampleRates);
       
  1095 	}
       
  1096 
       
  1097 EXPORT_C void RMMFAudioControllerCustomCommands::GetSupportedSinkBitRatesL(RArray<TUint>& aSupportedRates) const
       
  1098 	{
       
  1099 	DoGetUintArrayL(aSupportedRates, EMMFAudioControllerGetSupportedSinkBitRates);
       
  1100 	}
       
  1101 
       
  1102 EXPORT_C void RMMFAudioControllerCustomCommands::GetSupportedSinkNumChannelsL(RArray<TUint>& aSupportedChannels) const
       
  1103 	{
       
  1104 	DoGetUintArrayL(aSupportedChannels, EMMFAudioControllerGetSupportedSinkNumChannels);
       
  1105 	}
       
  1106 
       
  1107 EXPORT_C void RMMFAudioControllerCustomCommands::GetSupportedSinkDataTypesL(RArray<TFourCC>& aSupportedDataTypes) const
       
  1108 	{
       
  1109 	DoGetFourCCArrayL(aSupportedDataTypes, EMMFAudioControllerGetSupportedSinkDataTypes);
       
  1110 	}
       
  1111 
       
  1112 
       
  1113 
       
  1114 void RMMFAudioControllerCustomCommands::DoGetUintArrayL(RArray<TUint>& aArray, TMMFAudioControllerMessages aIpc) const
       
  1115 	{
       
  1116 	aArray.Reset();
       
  1117 
       
  1118 	TPckgBuf<TInt> numberOfElementsPckg;
       
  1119 	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
       
  1120 													 aIpc, 
       
  1121 													 KNullDesC8,
       
  1122 													 KNullDesC8,
       
  1123 													 numberOfElementsPckg));
       
  1124 
       
  1125 	HBufC8* buf = HBufC8::NewLC(numberOfElementsPckg()*sizeof(TUint));
       
  1126 	TPtr8 ptr = buf->Des();
       
  1127 
       
  1128 	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
       
  1129 													 EMMFAudioControllerCopyArrayData, 
       
  1130 													 KNullDesC8,
       
  1131 													 KNullDesC8,
       
  1132 													 ptr));
       
  1133 	RDesReadStream stream(ptr);
       
  1134 	CleanupClosePushL(stream);
       
  1135 
       
  1136 	for (TInt i=0; i<numberOfElementsPckg(); i++)
       
  1137 		{
       
  1138 		User::LeaveIfError(aArray.Append(stream.ReadUint32L()));
       
  1139 		}
       
  1140 
       
  1141 	CleanupStack::PopAndDestroy(2);//stream, buf
       
  1142 	}
       
  1143 
       
  1144 void RMMFAudioControllerCustomCommands::DoGetFourCCArrayL(RArray<TFourCC>& aArray, TMMFAudioControllerMessages aIpc) const
       
  1145 	{
       
  1146 	aArray.Reset();
       
  1147 
       
  1148 	TPckgBuf<TInt> numberOfElementsPckg;
       
  1149 	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
       
  1150 													 aIpc, 
       
  1151 													 KNullDesC8,
       
  1152 													 KNullDesC8,
       
  1153 													 numberOfElementsPckg));
       
  1154 
       
  1155 	HBufC8* buf = HBufC8::NewLC(numberOfElementsPckg()*sizeof(TFourCC));
       
  1156 	TPtr8 ptr = buf->Des();
       
  1157 
       
  1158 	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
       
  1159 													 EMMFAudioControllerCopyArrayData, 
       
  1160 													 KNullDesC8,
       
  1161 													 KNullDesC8,
       
  1162 													 ptr));
       
  1163 	RDesReadStream stream(ptr);
       
  1164 	CleanupClosePushL(stream);
       
  1165 
       
  1166 	for (TInt i=0; i<numberOfElementsPckg(); i++)
       
  1167 		{
       
  1168 		User::LeaveIfError(aArray.Append(stream.ReadInt32L()));
       
  1169 		}
       
  1170 
       
  1171 	CleanupStack::PopAndDestroy(2);//stream, buf
       
  1172 	}
       
  1173 
       
  1174 
       
  1175 
       
  1176 
       
  1177 
       
  1178 
       
  1179 
       
  1180 
       
  1181 
       
  1182 
       
  1183 
       
  1184 
       
  1185 
       
  1186 
       
  1187 EXPORT_C CMMFAudioControllerCustomCommandParser* CMMFAudioControllerCustomCommandParser::NewL(MMMFAudioControllerCustomCommandImplementor& aImplementor)
       
  1188 	{
       
  1189 	return new(ELeave) CMMFAudioControllerCustomCommandParser(aImplementor);
       
  1190 	}
       
  1191 
       
  1192 CMMFAudioControllerCustomCommandParser::CMMFAudioControllerCustomCommandParser(MMMFAudioControllerCustomCommandImplementor& aImplementor) :
       
  1193 	CMMFCustomCommandParserBase(KUidInterfaceMMFAudioController),
       
  1194 	iImplementor(aImplementor)
       
  1195 	{
       
  1196 	}
       
  1197 
       
  1198 EXPORT_C CMMFAudioControllerCustomCommandParser::~CMMFAudioControllerCustomCommandParser()
       
  1199 	{
       
  1200 	delete iDataCopyBuffer;
       
  1201 	}
       
  1202 
       
  1203 void CMMFAudioControllerCustomCommandParser::HandleRequest(TMMFMessage& aMessage)
       
  1204 	{
       
  1205 	if (aMessage.Destination().InterfaceId() == KUidInterfaceMMFAudioController)
       
  1206 		{
       
  1207 		TRAPD(error, DoHandleRequestL(aMessage));
       
  1208 		if (error)
       
  1209 			aMessage.Complete(error);
       
  1210 		}
       
  1211 	else
       
  1212 		{
       
  1213 		aMessage.Complete(KErrNotSupported);
       
  1214 		}
       
  1215 	}
       
  1216 
       
  1217 
       
  1218 void CMMFAudioControllerCustomCommandParser::DoHandleRequestL(TMMFMessage& aMessage)
       
  1219 	{
       
  1220 	TBool complete = ETrue;
       
  1221 	switch (aMessage.Function())
       
  1222 		{
       
  1223 	case EMMFAudioControllerSetSourceSampleRate:
       
  1224 		complete = DoSetSourceSampleRateL(aMessage);
       
  1225 		break;
       
  1226 	case EMMFAudioControllerSetSourceBitRate:
       
  1227 		complete = DoSetSourceBitRateL(aMessage);
       
  1228 		break;
       
  1229 	case EMMFAudioControllerSetSourceNumChannels:
       
  1230 		complete = DoSetSourceNumChannelsL(aMessage);
       
  1231 		break;
       
  1232 	case EMMFAudioControllerSetSourceFormat:
       
  1233 		complete = DoSetSourceFormatL(aMessage);
       
  1234 		break;
       
  1235 	case EMMFAudioControllerSetSourceDataType:
       
  1236 		complete = DoSetSourceDataTypeL(aMessage);
       
  1237 		break;
       
  1238 	case EMMFAudioControllerSetSinkSampleRate:
       
  1239 		complete = DoSetSinkSampleRateL(aMessage);
       
  1240 		break;
       
  1241 	case EMMFAudioControllerSetSinkBitRate:
       
  1242 		complete = DoSetSinkBitRateL(aMessage);
       
  1243 		break;
       
  1244 	case EMMFAudioControllerSetSinkNumChannels:
       
  1245 		complete = DoSetSinkNumChannelsL(aMessage);
       
  1246 		break;
       
  1247 	case EMMFAudioControllerSetSinkFormat:
       
  1248 		complete = DoSetSinkFormatL(aMessage);
       
  1249 		break;
       
  1250 	case EMMFAudioControllerSetSinkDataType:
       
  1251 		complete = DoSetSinkDataTypeL(aMessage);
       
  1252 		break;
       
  1253 	case EMMFAudioControllerSetCodec:
       
  1254 		complete = DoSetCodecL(aMessage);
       
  1255 		break;
       
  1256 	case EMMFAudioControllerGetSourceSampleRate:
       
  1257 		complete = DoGetSourceSampleRateL(aMessage);
       
  1258 		break;
       
  1259 	case EMMFAudioControllerGetSourceBitRate:
       
  1260 		complete = DoGetSourceBitRateL(aMessage);
       
  1261 		break;
       
  1262 	case EMMFAudioControllerGetSourceNumChannels:
       
  1263 		complete = DoGetSourceNumChannelsL(aMessage);
       
  1264 		break;
       
  1265 	case EMMFAudioControllerGetSourceFormat:
       
  1266 		complete = DoGetSourceFormatL(aMessage);
       
  1267 		break;
       
  1268 	case EMMFAudioControllerGetSourceDataType:
       
  1269 		complete = DoGetSourceDataTypeL(aMessage);
       
  1270 		break;
       
  1271 	case EMMFAudioControllerGetSinkSampleRate:
       
  1272 		complete = DoGetSinkSampleRateL(aMessage);
       
  1273 		break;
       
  1274 	case EMMFAudioControllerGetSinkBitRate:
       
  1275 		complete = DoGetSinkBitRateL(aMessage);
       
  1276 		break;
       
  1277 	case EMMFAudioControllerGetSinkNumChannels:
       
  1278 		complete = DoGetSinkNumChannelsL(aMessage);
       
  1279 		break;
       
  1280 	case EMMFAudioControllerGetSinkFormat:
       
  1281 		complete = DoGetSinkFormatL(aMessage);
       
  1282 		break;
       
  1283 	case EMMFAudioControllerGetSinkDataType:
       
  1284 		complete = DoGetSinkDataTypeL(aMessage);
       
  1285 		break;
       
  1286 	case EMMFAudioControllerGetSupportedSourceSampleRates:
       
  1287 		complete = DoGetSupportedSourceSampleRatesL(aMessage);
       
  1288 		break;
       
  1289 	case EMMFAudioControllerGetSupportedSourceBitRates:
       
  1290 		complete = DoGetSupportedSourceBitRatesL(aMessage);
       
  1291 		break;
       
  1292 	case EMMFAudioControllerGetSupportedSourceNumChannels:
       
  1293 		complete = DoGetSupportedSourceNumChannelsL(aMessage);
       
  1294 		break;
       
  1295 	case EMMFAudioControllerGetSupportedSourceDataTypes:
       
  1296 		complete = DoGetSupportedSourceDataTypesL(aMessage);
       
  1297 		break;
       
  1298 	case EMMFAudioControllerGetSupportedSinkSampleRates:
       
  1299 		complete = DoGetSupportedSinkSampleRatesL(aMessage);
       
  1300 		break;
       
  1301 	case EMMFAudioControllerGetSupportedSinkBitRates:
       
  1302 		complete = DoGetSupportedSinkBitRatesL(aMessage);
       
  1303 		break;
       
  1304 	case EMMFAudioControllerGetSupportedSinkNumChannels:
       
  1305 		complete = DoGetSupportedSinkNumChannelsL(aMessage);
       
  1306 		break;
       
  1307 	case EMMFAudioControllerGetSupportedSinkDataTypes:
       
  1308 		complete = DoGetSupportedSinkDataTypesL(aMessage);
       
  1309 		break;
       
  1310 	case EMMFAudioControllerCopyArrayData:
       
  1311 		complete = DoCopyArrayDataL(aMessage);
       
  1312 		break;
       
  1313 	default:
       
  1314 		User::Leave(KErrNotSupported);
       
  1315 		break;
       
  1316 		}
       
  1317 	if (complete)
       
  1318 		aMessage.Complete(KErrNone);
       
  1319 	}
       
  1320 
       
  1321 TBool CMMFAudioControllerCustomCommandParser::DoSetSourceSampleRateL(TMMFMessage& aMessage)
       
  1322 	{
       
  1323 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1324 	aMessage.ReadData1FromClientL(pckg);
       
  1325 	iImplementor.MacSetSourceSampleRateL(pckg().iSampleRate);
       
  1326 	return ETrue;
       
  1327 	}
       
  1328 
       
  1329 TBool CMMFAudioControllerCustomCommandParser::DoSetSourceNumChannelsL(TMMFMessage& aMessage)
       
  1330 	{
       
  1331 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1332 	aMessage.ReadData1FromClientL(pckg);
       
  1333 	iImplementor.MacSetSourceNumChannelsL(pckg().iChannels);
       
  1334 	return ETrue;
       
  1335 	}
       
  1336 
       
  1337 TBool CMMFAudioControllerCustomCommandParser::DoSetSourceFormatL(TMMFMessage& aMessage)
       
  1338 	{
       
  1339 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1340 	aMessage.ReadData1FromClientL(pckg);
       
  1341 	iImplementor.MacSetSourceFormatL(pckg().iFormatUid);
       
  1342 	return ETrue;
       
  1343 	}
       
  1344 
       
  1345 TBool CMMFAudioControllerCustomCommandParser::DoSetSinkSampleRateL(TMMFMessage& aMessage)
       
  1346 	{
       
  1347 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1348 	aMessage.ReadData1FromClientL(pckg);
       
  1349 	iImplementor.MacSetSinkSampleRateL(pckg().iSampleRate);
       
  1350 	return ETrue;
       
  1351 	}
       
  1352 
       
  1353 TBool CMMFAudioControllerCustomCommandParser::DoSetSinkNumChannelsL(TMMFMessage& aMessage)
       
  1354 	{
       
  1355 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1356 	aMessage.ReadData1FromClientL(pckg);
       
  1357 	iImplementor.MacSetSinkNumChannelsL(pckg().iChannels);
       
  1358 	return ETrue;
       
  1359 	}
       
  1360 
       
  1361 TBool CMMFAudioControllerCustomCommandParser::DoSetSinkFormatL(TMMFMessage& aMessage)
       
  1362 	{
       
  1363 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1364 	aMessage.ReadData1FromClientL(pckg);
       
  1365 	iImplementor.MacSetSinkFormatL(pckg().iFormatUid);
       
  1366 	return ETrue;
       
  1367 	}
       
  1368 
       
  1369 TBool CMMFAudioControllerCustomCommandParser::DoSetCodecL(TMMFMessage& aMessage)
       
  1370 	{
       
  1371 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1372 	aMessage.ReadData1FromClientL(pckg);
       
  1373 	iImplementor.MacSetCodecL(pckg().iSourceDataTypeCode, pckg().iSinkDataTypeCode);
       
  1374 	return ETrue;
       
  1375 	}
       
  1376 
       
  1377 
       
  1378 TBool CMMFAudioControllerCustomCommandParser::DoSetSourceBitRateL(TMMFMessage& aMessage)
       
  1379 	{
       
  1380 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1381 	aMessage.ReadData1FromClientL(pckg);
       
  1382 	iImplementor.MacSetSourceBitRateL(pckg().iSampleRate);
       
  1383 	return ETrue;
       
  1384 	}
       
  1385 
       
  1386 TBool CMMFAudioControllerCustomCommandParser::DoSetSourceDataTypeL(TMMFMessage& aMessage)
       
  1387 	{
       
  1388 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1389 	aMessage.ReadData1FromClientL(pckg);
       
  1390 	iImplementor.MacSetSourceDataTypeL(pckg().iSourceDataTypeCode);
       
  1391 	return ETrue;
       
  1392 	}
       
  1393 
       
  1394 TBool CMMFAudioControllerCustomCommandParser::DoSetSinkBitRateL(TMMFMessage& aMessage)
       
  1395 	{
       
  1396 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1397 	aMessage.ReadData1FromClientL(pckg);
       
  1398 	iImplementor.MacSetSinkBitRateL(pckg().iSampleRate);
       
  1399 	return ETrue;
       
  1400 	}
       
  1401 
       
  1402 TBool CMMFAudioControllerCustomCommandParser::DoSetSinkDataTypeL(TMMFMessage& aMessage)
       
  1403 	{
       
  1404 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1405 	aMessage.ReadData1FromClientL(pckg);
       
  1406 	iImplementor.MacSetSinkDataTypeL(pckg().iSinkDataTypeCode);
       
  1407 	return ETrue;
       
  1408 	}
       
  1409 
       
  1410 TBool CMMFAudioControllerCustomCommandParser::DoGetSourceSampleRateL(TMMFMessage& aMessage)
       
  1411 	{
       
  1412 	TUint rate = 0;
       
  1413 	iImplementor.MacGetSourceSampleRateL(rate);
       
  1414 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1415 	pckg().iSampleRate = rate;
       
  1416 	aMessage.WriteDataToClientL(pckg);
       
  1417 	return ETrue;
       
  1418 	}
       
  1419 
       
  1420 TBool CMMFAudioControllerCustomCommandParser::DoGetSourceBitRateL(TMMFMessage& aMessage)
       
  1421 	{
       
  1422 	TUint rate = 0;
       
  1423 	iImplementor.MacGetSourceBitRateL(rate);
       
  1424 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1425 	pckg().iSampleRate = rate;
       
  1426 	aMessage.WriteDataToClientL(pckg);
       
  1427 	return ETrue;
       
  1428 	}
       
  1429 
       
  1430 TBool CMMFAudioControllerCustomCommandParser::DoGetSourceNumChannelsL(TMMFMessage& aMessage)
       
  1431 	{
       
  1432 	TUint channels = 0;
       
  1433 	iImplementor.MacGetSourceNumChannelsL(channels);
       
  1434 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1435 	pckg().iChannels = channels;
       
  1436 	aMessage.WriteDataToClientL(pckg);
       
  1437 	return ETrue;
       
  1438 	}
       
  1439 
       
  1440 TBool CMMFAudioControllerCustomCommandParser::DoGetSourceFormatL(TMMFMessage& aMessage)
       
  1441 	{
       
  1442 	TUid format;
       
  1443 	iImplementor.MacGetSourceFormatL(format);
       
  1444 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1445 	pckg().iFormatUid = format;
       
  1446 	aMessage.WriteDataToClientL(pckg);
       
  1447 	return ETrue;
       
  1448 	}
       
  1449 
       
  1450 TBool CMMFAudioControllerCustomCommandParser::DoGetSourceDataTypeL(TMMFMessage& aMessage)
       
  1451 	{
       
  1452 	TFourCC fourCC;
       
  1453 	iImplementor.MacGetSourceDataTypeL(fourCC);
       
  1454 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1455 	pckg().iSourceDataTypeCode = fourCC;
       
  1456 	aMessage.WriteDataToClientL(pckg);
       
  1457 	return ETrue;
       
  1458 	}
       
  1459 
       
  1460 TBool CMMFAudioControllerCustomCommandParser::DoGetSinkSampleRateL(TMMFMessage& aMessage)
       
  1461 	{
       
  1462 	TUint rate = 0;
       
  1463 	iImplementor.MacGetSinkSampleRateL(rate);
       
  1464 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1465 	pckg().iSampleRate = rate;
       
  1466 	aMessage.WriteDataToClientL(pckg);
       
  1467 	return ETrue;
       
  1468 	}
       
  1469 
       
  1470 TBool CMMFAudioControllerCustomCommandParser::DoGetSinkBitRateL(TMMFMessage& aMessage)
       
  1471 	{
       
  1472 	TUint rate = 0;
       
  1473 	iImplementor.MacGetSinkBitRateL(rate);
       
  1474 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1475 	pckg().iSampleRate = rate;
       
  1476 	aMessage.WriteDataToClientL(pckg);
       
  1477 	return ETrue;
       
  1478 	}
       
  1479 
       
  1480 TBool CMMFAudioControllerCustomCommandParser::DoGetSinkNumChannelsL(TMMFMessage& aMessage)
       
  1481 	{
       
  1482 	TUint channels = 0;
       
  1483 	iImplementor.MacGetSinkNumChannelsL(channels);
       
  1484 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1485 	pckg().iChannels = channels;
       
  1486 	aMessage.WriteDataToClientL(pckg);
       
  1487 	return ETrue;
       
  1488 	}
       
  1489 
       
  1490 TBool CMMFAudioControllerCustomCommandParser::DoGetSinkFormatL(TMMFMessage& aMessage)
       
  1491 	{
       
  1492 	TUid format;
       
  1493 	iImplementor.MacGetSinkFormatL(format);
       
  1494 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1495 	pckg().iFormatUid = format;
       
  1496 	aMessage.WriteDataToClientL(pckg);
       
  1497 	return ETrue;
       
  1498 	}
       
  1499 
       
  1500 TBool CMMFAudioControllerCustomCommandParser::DoGetSinkDataTypeL(TMMFMessage& aMessage)
       
  1501 	{
       
  1502 	TFourCC fourCC;
       
  1503 	iImplementor.MacGetSinkDataTypeL(fourCC);
       
  1504 	TPckgBuf<TMMFAudioConfig> pckg;
       
  1505 	pckg().iSinkDataTypeCode = fourCC;
       
  1506 	aMessage.WriteDataToClientL(pckg);
       
  1507 	return ETrue;
       
  1508 	}
       
  1509 
       
  1510 TBool CMMFAudioControllerCustomCommandParser::DoGetSupportedSourceSampleRatesL(TMMFMessage& aMessage)
       
  1511 	{
       
  1512 	RArray<TUint> rates;
       
  1513 	CleanupClosePushL(rates);
       
  1514 	iImplementor.MacGetSupportedSourceSampleRatesL(rates);
       
  1515 
       
  1516 	DoCreateBufFromUintArrayL(rates);
       
  1517 
       
  1518 	TPckgBuf<TInt> pckg;
       
  1519 	pckg() = rates.Count();
       
  1520 	aMessage.WriteDataToClientL(pckg);
       
  1521 
       
  1522 	CleanupStack::PopAndDestroy();//rates
       
  1523 	return ETrue;
       
  1524 	}
       
  1525 
       
  1526 void CMMFAudioControllerCustomCommandParser::DoCreateBufFromUintArrayL(RArray<TUint>& aArray)
       
  1527 	{
       
  1528 	delete iDataCopyBuffer;
       
  1529 	iDataCopyBuffer = NULL;
       
  1530 
       
  1531 	iDataCopyBuffer = CBufFlat::NewL(KBufExpandSize8);
       
  1532 	RBufWriteStream stream;
       
  1533 	stream.Open(*iDataCopyBuffer);
       
  1534 	CleanupClosePushL(stream);
       
  1535 	for (TInt i=0;i<aArray.Count();i++)
       
  1536 		stream.WriteUint32L(aArray[i]);
       
  1537 	CleanupStack::PopAndDestroy();//stream
       
  1538 	}
       
  1539 
       
  1540 void CMMFAudioControllerCustomCommandParser::DoCreateBufFromFourCCArrayL(RArray<TFourCC>& aArray)
       
  1541 	{
       
  1542 	delete iDataCopyBuffer;
       
  1543 	iDataCopyBuffer = NULL;
       
  1544 
       
  1545 	iDataCopyBuffer = CBufFlat::NewL(KBufExpandSize8);
       
  1546 	RBufWriteStream stream;
       
  1547 	stream.Open(*iDataCopyBuffer);
       
  1548 	CleanupClosePushL(stream);
       
  1549 	for (TInt i=0;i<aArray.Count();i++)
       
  1550 		{
       
  1551 		stream.WriteInt32L(aArray[i].FourCC());
       
  1552 		}
       
  1553 	CleanupStack::PopAndDestroy();//stream
       
  1554 	}
       
  1555 
       
  1556 TBool CMMFAudioControllerCustomCommandParser::DoGetSupportedSourceBitRatesL(TMMFMessage& aMessage)
       
  1557 	{
       
  1558 	RArray<TUint> rates;
       
  1559 	CleanupClosePushL(rates);
       
  1560 	iImplementor.MacGetSupportedSourceBitRatesL(rates);
       
  1561 
       
  1562 	DoCreateBufFromUintArrayL(rates);
       
  1563 
       
  1564 	TPckgBuf<TInt> pckg;
       
  1565 	pckg() = rates.Count();
       
  1566 	aMessage.WriteDataToClientL(pckg);
       
  1567 
       
  1568 	CleanupStack::PopAndDestroy();//rates
       
  1569 	return ETrue;
       
  1570 	}
       
  1571 
       
  1572 TBool CMMFAudioControllerCustomCommandParser::DoGetSupportedSourceNumChannelsL(TMMFMessage& aMessage)
       
  1573 	{
       
  1574 	RArray<TUint> array;
       
  1575 	CleanupClosePushL(array);
       
  1576 	iImplementor.MacGetSupportedSourceNumChannelsL(array);
       
  1577 
       
  1578 	DoCreateBufFromUintArrayL(array);
       
  1579 
       
  1580 	TPckgBuf<TInt> pckg;
       
  1581 	pckg() = array.Count();
       
  1582 	aMessage.WriteDataToClientL(pckg);
       
  1583 
       
  1584 	CleanupStack::PopAndDestroy();//array
       
  1585 	return ETrue;
       
  1586 	}
       
  1587 
       
  1588 TBool CMMFAudioControllerCustomCommandParser::DoGetSupportedSourceDataTypesL(TMMFMessage& aMessage)
       
  1589 	{
       
  1590 	RArray<TFourCC> array;
       
  1591 	CleanupClosePushL(array);
       
  1592 	iImplementor.MacGetSupportedSourceDataTypesL(array);
       
  1593 
       
  1594 	DoCreateBufFromFourCCArrayL(array);
       
  1595 
       
  1596 	TPckgBuf<TInt> pckg;
       
  1597 	pckg() = array.Count();
       
  1598 	aMessage.WriteDataToClientL(pckg);
       
  1599 
       
  1600 	CleanupStack::PopAndDestroy();//array
       
  1601 	return ETrue;
       
  1602 	}
       
  1603 
       
  1604 TBool CMMFAudioControllerCustomCommandParser::DoGetSupportedSinkSampleRatesL(TMMFMessage& aMessage)
       
  1605 	{
       
  1606 	RArray<TUint> array;
       
  1607 	CleanupClosePushL(array);
       
  1608 	iImplementor.MacGetSupportedSinkSampleRatesL(array);
       
  1609 
       
  1610 	DoCreateBufFromUintArrayL(array);
       
  1611 
       
  1612 	TPckgBuf<TInt> pckg;
       
  1613 	pckg() = array.Count();
       
  1614 	aMessage.WriteDataToClientL(pckg);
       
  1615 
       
  1616 	CleanupStack::PopAndDestroy();//array
       
  1617 	return ETrue;
       
  1618 	}
       
  1619 
       
  1620 TBool CMMFAudioControllerCustomCommandParser::DoGetSupportedSinkBitRatesL(TMMFMessage& aMessage)
       
  1621 	{
       
  1622 	RArray<TUint> array;
       
  1623 	CleanupClosePushL(array);
       
  1624 	iImplementor.MacGetSupportedSinkBitRatesL(array);
       
  1625 
       
  1626 	DoCreateBufFromUintArrayL(array);
       
  1627 
       
  1628 	TPckgBuf<TInt> pckg;
       
  1629 	pckg() = array.Count();
       
  1630 	aMessage.WriteDataToClientL(pckg);
       
  1631 
       
  1632 	CleanupStack::PopAndDestroy();//array
       
  1633 	return ETrue;
       
  1634 	}
       
  1635 
       
  1636 TBool CMMFAudioControllerCustomCommandParser::DoGetSupportedSinkNumChannelsL(TMMFMessage& aMessage)
       
  1637 	{
       
  1638 	RArray<TUint> array;
       
  1639 	CleanupClosePushL(array);
       
  1640 	iImplementor.MacGetSupportedSinkNumChannelsL(array);
       
  1641 
       
  1642 	DoCreateBufFromUintArrayL(array);
       
  1643 
       
  1644 	TPckgBuf<TInt> pckg;
       
  1645 	pckg() = array.Count();
       
  1646 	aMessage.WriteDataToClientL(pckg);
       
  1647 
       
  1648 	CleanupStack::PopAndDestroy();//array
       
  1649 	return ETrue;
       
  1650 	}
       
  1651 
       
  1652 TBool CMMFAudioControllerCustomCommandParser::DoGetSupportedSinkDataTypesL(TMMFMessage& aMessage)
       
  1653 	{
       
  1654 	RArray<TFourCC> array;
       
  1655 	CleanupClosePushL(array);
       
  1656 	iImplementor.MacGetSupportedSinkDataTypesL(array);
       
  1657 
       
  1658 	DoCreateBufFromFourCCArrayL(array);
       
  1659 
       
  1660 	TPckgBuf<TInt> pckg;
       
  1661 	pckg() = array.Count();
       
  1662 	aMessage.WriteDataToClientL(pckg);
       
  1663 
       
  1664 	CleanupStack::PopAndDestroy();//array
       
  1665 	return ETrue;
       
  1666 	}
       
  1667 
       
  1668 TBool CMMFAudioControllerCustomCommandParser::DoCopyArrayDataL(TMMFMessage& aMessage)
       
  1669 	{
       
  1670 	if (!iDataCopyBuffer)
       
  1671 		User::Leave(KErrNotReady);
       
  1672 	aMessage.WriteDataToClientL(iDataCopyBuffer->Ptr(0));
       
  1673 	return ETrue;
       
  1674 	}
       
  1675 
       
  1676 
       
  1677 
       
  1678 
       
  1679 TBool CMMFVideoRecordControllerCustomCommandParser::DoCopyCDesC8ArrayDataL(TMMFMessage& aMessage)
       
  1680 	{
       
  1681 	if (!iDataCopyBuffer)
       
  1682 		User::Leave(KErrNotReady);
       
  1683 	aMessage.WriteDataToClientL(iDataCopyBuffer->Ptr(0));
       
  1684 	return ETrue;
       
  1685 	}
       
  1686 
       
  1687 
       
  1688 
       
  1689 
       
  1690 
       
  1691 
       
  1692 
       
  1693 
       
  1694 
       
  1695 
       
  1696 
       
  1697 
       
  1698 
       
  1699 
       
  1700 
       
  1701 
       
  1702 
       
  1703 
       
  1704 
       
  1705 
       
  1706 
       
  1707 
       
  1708 
       
  1709 
       
  1710 EXPORT_C RMMFVideoControllerCustomCommands::RMMFVideoControllerCustomCommands(RMMFController& aController) :
       
  1711 	RMMFCustomCommandsBase(aController, KUidInterfaceMMFVideoController)
       
  1712 	{
       
  1713 	}
       
  1714 
       
  1715 EXPORT_C TInt RMMFVideoControllerCustomCommands::GetFrameRate(TReal32& aFramesPerSecond) const
       
  1716 	{
       
  1717 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  1718 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
  1719 												EMMFVideoControllerGetFrameRate, 
       
  1720 												KNullDesC8,
       
  1721 												KNullDesC8,
       
  1722 												configPackage);
       
  1723 	if (!error)
       
  1724 		aFramesPerSecond = configPackage().iFramesPerSecond;
       
  1725 	return error;
       
  1726 	}
       
  1727 
       
  1728 EXPORT_C TInt RMMFVideoControllerCustomCommands::SetFrameRate(TReal32 aFramesPerSecond) const
       
  1729 	{
       
  1730 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  1731 	configPackage().iFramesPerSecond = aFramesPerSecond;
       
  1732 	return iController.CustomCommandSync(iDestinationPckg, 
       
  1733 												EMMFVideoControllerSetFrameRate, 
       
  1734 												configPackage,
       
  1735 												KNullDesC8);
       
  1736 	}
       
  1737 
       
  1738 
       
  1739 EXPORT_C void RMMFVideoPlayControllerCustomCommands::GetFrame(CFbsBitmap& aBitmap,TRequestStatus& aStatus)
       
  1740 	{
       
  1741 	TInt handle = aBitmap.Handle();
       
  1742 	
       
  1743 	iConfigPackage().iFrameBitmapServerHandle = handle;
       
  1744 	iController.CustomCommandAsync(iDestinationPckg, 
       
  1745 										 EMMFVideoPlayControllerGetFrame, 
       
  1746 										 iConfigPackage,
       
  1747 										 KNullDesC8,
       
  1748 										 aStatus);
       
  1749 	}
       
  1750 
       
  1751 EXPORT_C TInt RMMFVideoPlayControllerCustomCommands::UpdateDisplayRegion(const TRegion& aRegion) const
       
  1752 	{
       
  1753 	TPckgBuf<TInt> numberOfRectsPckg;
       
  1754 	numberOfRectsPckg() = aRegion.Count();
       
  1755 	const TRect* rects = aRegion.RectangleList();
       
  1756 	TPtrC8 rectMemory(REINTERPRET_CAST(TUint8*,(void*) rects), numberOfRectsPckg() * sizeof(TRect));
       
  1757 
       
  1758 	return iController.CustomCommandSync(iDestinationPckg, 
       
  1759 										 EMMFVideoPlayControllerUpdateDisplayRegion, 
       
  1760 										 numberOfRectsPckg,
       
  1761 										 rectMemory);
       
  1762 	}
       
  1763 
       
  1764 
       
  1765 EXPORT_C TInt RMMFVideoPlayControllerCustomCommands::DirectScreenAccessEvent(const TMMFDSAEvent aDSAEvent) const
       
  1766 	{
       
  1767 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  1768 	configPackage().iDSAEvent = (TInt)aDSAEvent;
       
  1769 	return iController.CustomCommandSync(iDestinationPckg, 
       
  1770 												EMMFVideoPlayControllerDSAEvent, 
       
  1771 												configPackage,
       
  1772 												KNullDesC8);
       
  1773 	}
       
  1774 	
       
  1775 	
       
  1776 EXPORT_C TInt RMMFVideoPlayControllerCustomCommands::Play(const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd) const
       
  1777 	{
       
  1778 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  1779 	configPackage().iStartPosition = aStart;
       
  1780 	configPackage().iEndPosition = aEnd;
       
  1781 	return iController.CustomCommandSync(iDestinationPckg, 
       
  1782 												EMMFVideoPlayControllerPlay, 
       
  1783 												configPackage,
       
  1784 												KNullDesC8);
       
  1785 	}
       
  1786 	
       
  1787 EXPORT_C TInt RMMFVideoPlayControllerCustomCommands::RefreshFrame() const
       
  1788 	{
       
  1789 	return iController.CustomCommandSync(iDestinationPckg, 
       
  1790 												EMMFVideoPlayControllerRefreshFrame, 
       
  1791 												KNullDesC8,
       
  1792 												KNullDesC8);
       
  1793 	}
       
  1794 	
       
  1795 EXPORT_C TInt RMMFVideoPlayControllerCustomCommands::GetLoadingProgress(TInt& aPercentageComplete) const
       
  1796 	{
       
  1797 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  1798 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
  1799 												EMMFVideoPlayControllerGetLoadingProgress, 
       
  1800 												KNullDesC8,
       
  1801 												KNullDesC8,
       
  1802 												configPackage);
       
  1803 	if (!error)
       
  1804 		aPercentageComplete = configPackage().iLoadingCompletePercentage;
       
  1805 	return error;
       
  1806 	}
       
  1807 
       
  1808 
       
  1809 
       
  1810 
       
  1811 EXPORT_C TInt RMMFVideoControllerCustomCommands::GetVideoFrameSize(TSize& aVideoFrameSize) const
       
  1812 	{
       
  1813 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  1814 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
  1815 												EMMFVideoControllerGetVideoFrameSize, 
       
  1816 												KNullDesC8,
       
  1817 												KNullDesC8,
       
  1818 												configPackage);
       
  1819 	if (!error)
       
  1820 		aVideoFrameSize = configPackage().iVideoFrameSize;
       
  1821 	return error;
       
  1822 	}
       
  1823 
       
  1824 EXPORT_C TInt RMMFVideoControllerCustomCommands::GetAudioBitRate(TInt& aBitRate) const
       
  1825 	{
       
  1826 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  1827 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
  1828 												EMMFVideoControllerGetAudioBitRate, 
       
  1829 												KNullDesC8,
       
  1830 												KNullDesC8,
       
  1831 												configPackage);
       
  1832 	if (!error)
       
  1833 		aBitRate = configPackage().iAudioBitRate;
       
  1834 	return error;
       
  1835 	}
       
  1836 
       
  1837 EXPORT_C TInt RMMFVideoControllerCustomCommands::GetVideoBitRate(TInt& aBitRate) const
       
  1838 	{
       
  1839 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  1840 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
  1841 												EMMFVideoControllerGetVideoBitRate, 
       
  1842 												KNullDesC8,
       
  1843 												KNullDesC8,
       
  1844 												configPackage);
       
  1845 	if (!error)
       
  1846 		aBitRate = configPackage().iVideoBitRate;
       
  1847 	return error;
       
  1848 	}
       
  1849 EXPORT_C TInt RMMFVideoControllerCustomCommands::GetAudioCodec(TFourCC& aCodec) const
       
  1850 	{
       
  1851 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  1852 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
  1853 												EMMFVideoControllerGetAudioCodec, 
       
  1854 												KNullDesC8,
       
  1855 												KNullDesC8,
       
  1856 												configPackage);
       
  1857 	if (!error)
       
  1858 		aCodec = configPackage().iAudioCodec;
       
  1859 	return error;
       
  1860 	}
       
  1861 
       
  1862 
       
  1863 EXPORT_C void Reserved1( void )
       
  1864 	{
       
  1865 	// dummy reserved function to replace GetVideoCodec() which was removed.
       
  1866 	// this should never be called so generate a panic
       
  1867 	Panic( ENoGetVideoCodec );
       
  1868 	}
       
  1869 
       
  1870 EXPORT_C void Reserved2( void )
       
  1871 	{
       
  1872 	// dummy reserved function to replace GetSupportedSourceVideoTypes() which was removed.
       
  1873 	// this should never be called so generate a panic
       
  1874 	Panic( ENoGetSourceVideoTypes );
       
  1875 	}
       
  1876 
       
  1877 EXPORT_C void Reserved3( void )
       
  1878 	{
       
  1879 	// dummy reserved function to replace GetSupportedSourceAudioTypes() which was removed.
       
  1880 	// this should never be called so generate a panic
       
  1881 	Panic( ENoGetSourceAudioTypes );
       
  1882 	}
       
  1883 
       
  1884 
       
  1885 EXPORT_C TInt RMMFVideoControllerCustomCommands::GetVideoMimeType(TDes8& aMimeType) const
       
  1886 	{
       
  1887 	TInt err = iController.CustomCommandSync(iDestinationPckg, 
       
  1888 										 EMMFVideoControllerGetVideoMimeType, 
       
  1889 										 KNullDesC8,										 
       
  1890 										 KNullDesC8,
       
  1891 										 aMimeType);
       
  1892 	return err;
       
  1893 	}
       
  1894 
       
  1895 
       
  1896 void RMMFVideoRecordControllerCustomCommands::DoGetFourCCArrayL(RArray<TFourCC>& aArray) const
       
  1897 	{
       
  1898 	aArray.Reset();
       
  1899 
       
  1900 	TPckgBuf<TInt> numberOfElementsPckg;
       
  1901 	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
       
  1902 													 EMMFVideoRecordControllerGetSupportedSinkAudioTypes, 
       
  1903 													 KNullDesC8,
       
  1904 													 KNullDesC8,
       
  1905 													 numberOfElementsPckg));
       
  1906 
       
  1907 	HBufC8* buf = HBufC8::NewLC(numberOfElementsPckg()*sizeof(TFourCC));
       
  1908 	TPtr8 ptr = buf->Des();
       
  1909 
       
  1910 	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
       
  1911 													 EMMFVideoRecordControllerCopyFourCCArrayData, 
       
  1912 													 KNullDesC8,
       
  1913 													 KNullDesC8,
       
  1914 													 ptr));
       
  1915 	RDesReadStream stream(ptr);
       
  1916 	CleanupClosePushL(stream);
       
  1917 
       
  1918 	for (TInt i=0; i<numberOfElementsPckg(); i++)
       
  1919 		{
       
  1920 		User::LeaveIfError(aArray.Append(stream.ReadInt32L()));
       
  1921 		}
       
  1922 
       
  1923 	CleanupStack::PopAndDestroy(2);//stream, buf
       
  1924 	}
       
  1925 
       
  1926 
       
  1927 void RMMFVideoRecordControllerCustomCommands::DoGetCDesC8ArrayL(CDesC8Array& aArray, TMMFVideoRecordControllerMessages aIpc) const
       
  1928 	{
       
  1929 	aArray.Reset();
       
  1930 
       
  1931 	TPckgBuf<TMimeTypeBufferInfo> bufferInfoPckg;
       
  1932 	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
       
  1933 													 aIpc, 
       
  1934 													 KNullDesC8,
       
  1935 													 KNullDesC8,
       
  1936 													 bufferInfoPckg));
       
  1937 
       
  1938 	// allocate a buffer of size dictated by server side
       
  1939 	HBufC8* buf = HBufC8::NewLC(bufferInfoPckg().bufferLen);
       
  1940 	TPtr8 ptr = buf->Des();
       
  1941 
       
  1942 	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
       
  1943 													 EMMFVideoRecordControllerCopyDescriptorArrayData, 
       
  1944 													 KNullDesC8,
       
  1945 													 KNullDesC8,
       
  1946 													 ptr));
       
  1947 	RDesReadStream stream(ptr);
       
  1948 	CleanupClosePushL(stream);
       
  1949 
       
  1950 	TInt32 len;
       
  1951 
       
  1952 	for (TInt i=0; i < bufferInfoPckg().count; i++)
       
  1953 		{
       
  1954 		User::LeaveIfError(len = stream.ReadInt32L());
       
  1955 
       
  1956 		HBufC8* tempDesc = HBufC8::NewLC(len);
       
  1957 		TPtr8 tempPtr = tempDesc->Des();
       
  1958 
       
  1959 		stream.ReadL(tempPtr, len);
       
  1960 		aArray.AppendL(tempPtr);
       
  1961 
       
  1962 		CleanupStack::PopAndDestroy(tempDesc);
       
  1963 		}
       
  1964 
       
  1965 	CleanupStack::PopAndDestroy(2);//stream, buf
       
  1966 
       
  1967 	}
       
  1968 
       
  1969 
       
  1970 EXPORT_C TInt RMMFVideoPlayControllerCustomCommands::SetDisplayWindow(const TRect& aWindowRect,
       
  1971 																	  const TRect& aClipRect) const
       
  1972 	{
       
  1973 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  1974 	configPackage().iWindowRect = aWindowRect;
       
  1975  	configPackage().iClipRect = aClipRect;
       
  1976 
       
  1977 	return iController.CustomCommandSync(iDestinationPckg, 
       
  1978 										 EMMFVideoPlayControllerSetDisplayWindow, 
       
  1979 										 configPackage,
       
  1980 										 KNullDesC8);
       
  1981 	}
       
  1982 
       
  1983 EXPORT_C TInt RMMFVideoPlayControllerCustomCommands::GetAudioEnabled(TBool& aEnabled) const
       
  1984 	{
       
  1985 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  1986  	
       
  1987 	TInt err = iController.CustomCommandSync(iDestinationPckg, 
       
  1988 										 EMMFVideoPlayControllerGetAudioEnabled, 
       
  1989 										 KNullDesC8,
       
  1990 										 KNullDesC8,
       
  1991 										 configPackage);
       
  1992 
       
  1993 	if (!err)
       
  1994 		aEnabled = configPackage().iAudioEnabled;
       
  1995 	return err;
       
  1996 	}
       
  1997 
       
  1998 EXPORT_C TInt RMMFVideoPlayControllerCustomCommands::Prepare()
       
  1999 	{
       
  2000 	return iController.CustomCommandSync(iDestinationPckg,
       
  2001 										EMMFVideoPlayControllerPrepare,
       
  2002 										KNullDesC8,
       
  2003 										KNullDesC8);
       
  2004 	}
       
  2005 
       
  2006 EXPORT_C TInt RMMFVideoPlayControllerCustomCommands::SetRotation(TVideoRotation aRotation) const
       
  2007 	{
       
  2008 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  2009 	configPackage().iVideoRotation = aRotation;
       
  2010 	
       
  2011 	return iController.CustomCommandSync(iDestinationPckg,
       
  2012 										EMMFVideoPlayControllerSetRotation,
       
  2013 										configPackage,
       
  2014 										KNullDesC8);
       
  2015 	}
       
  2016 
       
  2017 EXPORT_C TInt RMMFVideoPlayControllerCustomCommands::GetRotation(TVideoRotation& aRotation) const
       
  2018 	{
       
  2019 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  2020  	
       
  2021 	TInt err = iController.CustomCommandSync(iDestinationPckg, 
       
  2022 										 EMMFVideoPlayControllerGetRotation, 
       
  2023 										 KNullDesC8,
       
  2024 										 KNullDesC8,
       
  2025 										 configPackage);
       
  2026 
       
  2027 	if (!err)
       
  2028 		aRotation = configPackage().iVideoRotation;
       
  2029 	return err;
       
  2030 	}
       
  2031 
       
  2032 EXPORT_C TInt RMMFVideoPlayControllerCustomCommands::SetScaleFactor(TReal32 aWidthPercentage, TReal32 aHeightPercentage, TBool aAntiAliasFiltering) const
       
  2033 	{
       
  2034 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  2035 	configPackage().iWidthScalePercentage = aWidthPercentage;
       
  2036 	configPackage().iHeightScalePercentage = aHeightPercentage;
       
  2037 	configPackage().iAntiAliasFiltering = aAntiAliasFiltering;
       
  2038 	
       
  2039 	return iController.CustomCommandSync(iDestinationPckg,
       
  2040 										EMMFVideoPlayControllerSetScaleFactor,
       
  2041 										configPackage,
       
  2042 										KNullDesC8);
       
  2043 	}
       
  2044 
       
  2045 EXPORT_C TInt RMMFVideoPlayControllerCustomCommands::GetScaleFactor(TReal32& aWidthPercentage, TReal32& aHeightPercentage, TBool& aAntiAliasFiltering) const
       
  2046 	{
       
  2047 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  2048  	
       
  2049 	TInt err = iController.CustomCommandSync(iDestinationPckg, 
       
  2050 										 EMMFVideoPlayControllerGetScaleFactor, 
       
  2051 										 KNullDesC8,
       
  2052 										 KNullDesC8,
       
  2053 										 configPackage);
       
  2054 
       
  2055 	if (!err)
       
  2056 		{
       
  2057 		aWidthPercentage = configPackage().iWidthScalePercentage;
       
  2058 		aHeightPercentage = configPackage().iHeightScalePercentage;
       
  2059 		aAntiAliasFiltering = configPackage().iAntiAliasFiltering;
       
  2060 		}
       
  2061 	return err;
       
  2062 	}
       
  2063 
       
  2064 EXPORT_C TInt RMMFVideoPlayControllerCustomCommands::SetCropRegion(const TRect& aCropRegion) const
       
  2065 	{
       
  2066 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  2067 	configPackage().iCropRectangle = aCropRegion;
       
  2068 	
       
  2069 	return iController.CustomCommandSync(iDestinationPckg,
       
  2070 										EMMFVideoPlayControllerSetCropRegion,
       
  2071 										configPackage,
       
  2072 										KNullDesC8);
       
  2073 	}
       
  2074 
       
  2075 EXPORT_C TInt RMMFVideoPlayControllerCustomCommands::GetCropRegion(TRect& aCropRegion) const
       
  2076 	{
       
  2077 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  2078  	
       
  2079 	TInt err = iController.CustomCommandSync(iDestinationPckg, 
       
  2080 										 EMMFVideoPlayControllerGetCropRegion, 
       
  2081 										 KNullDesC8,
       
  2082 										 KNullDesC8,
       
  2083 										 configPackage);
       
  2084 
       
  2085 	if (!err)
       
  2086 		{
       
  2087 		aCropRegion = configPackage().iCropRectangle;
       
  2088 		}
       
  2089 	return err;
       
  2090 	}
       
  2091 
       
  2092 EXPORT_C RMMFVideoRecordControllerCustomCommands::RMMFVideoRecordControllerCustomCommands(RMMFController& aController) :
       
  2093 	RMMFCustomCommandsBase(aController, KUidInterfaceMMFVideoRecordController)
       
  2094 	{
       
  2095 	}
       
  2096 
       
  2097 
       
  2098 EXPORT_C TInt RMMFVideoRecordControllerCustomCommands::SetVideoFormat(TUid aFormatUid) const
       
  2099 	{
       
  2100 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  2101 	configPackage().iFormatUid = aFormatUid;
       
  2102 	return iController.CustomCommandSync(iDestinationPckg, 
       
  2103 										 EMMFVideoRecordControllerSetVideoFormat, 
       
  2104 										 configPackage,
       
  2105 										 KNullDesC8);
       
  2106 	}
       
  2107 
       
  2108 EXPORT_C TInt RMMFVideoRecordControllerCustomCommands::SetVideoCodec(const TDesC8& aVideoCodec) const
       
  2109 	{
       
  2110 	return iController.CustomCommandSync(iDestinationPckg, 
       
  2111 										 EMMFVideoRecordControllerSetVideoCodec, 
       
  2112 										 aVideoCodec,
       
  2113 										 KNullDesC8);
       
  2114 	}
       
  2115 
       
  2116 
       
  2117 EXPORT_C TInt RMMFVideoRecordControllerCustomCommands::SetAudioCodec(TFourCC aAudioCodec) const
       
  2118 	{
       
  2119 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  2120 	configPackage().iAudioCodec = aAudioCodec;
       
  2121 	return iController.CustomCommandSync(iDestinationPckg, 
       
  2122 										 EMMFVideoRecordControllerSetAudioCodec, 
       
  2123 										 configPackage,
       
  2124 										 KNullDesC8);
       
  2125 	}
       
  2126 
       
  2127 
       
  2128 EXPORT_C void RMMFVideoRecordControllerCustomCommands::AddMetaDataEntryL(const CMMFMetaDataEntry& aNewEntry) const
       
  2129 	{
       
  2130 	CBufFlat* buf = CBufFlat::NewL(KBufExpandSize32);
       
  2131 	CleanupStack::PushL(buf);
       
  2132 	RBufWriteStream s;
       
  2133 	s.Open(*buf);
       
  2134 	CleanupClosePushL(s);
       
  2135 	aNewEntry.ExternalizeL(s);
       
  2136 	TPtr8 bufData = buf->Ptr(0);
       
  2137 	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg,
       
  2138 													 EMMFVideoRecordControllerAddMetaDataEntry,
       
  2139 													 bufData,
       
  2140 													 KNullDesC8));
       
  2141 	CleanupStack::PopAndDestroy(2);//s, buf
       
  2142 	}
       
  2143 
       
  2144 EXPORT_C TInt RMMFVideoRecordControllerCustomCommands::RemoveMetaDataEntry(TInt aIndex) const
       
  2145 	{
       
  2146 	TPckgBuf<TInt> pckg(aIndex);
       
  2147 	return iController.CustomCommandSync(iDestinationPckg,
       
  2148 										 EMMFVideoRecordControllerRemoveMetaDataEntry,
       
  2149 										 pckg,
       
  2150 										 KNullDesC8);
       
  2151 	}
       
  2152 
       
  2153 EXPORT_C void RMMFVideoRecordControllerCustomCommands::ReplaceMetaDataEntryL(TInt aIndex, const CMMFMetaDataEntry& aNewEntry) const
       
  2154 	{
       
  2155 	TPckgBuf<TInt> indexPckg(aIndex);
       
  2156 	CBufFlat* buf = CBufFlat::NewL(KBufExpandSize32);
       
  2157 	CleanupStack::PushL(buf);
       
  2158 	RBufWriteStream s;
       
  2159 	s.Open(*buf);
       
  2160 	CleanupClosePushL(s);
       
  2161 	aNewEntry.ExternalizeL(s);
       
  2162 	TPtr8 bufData = buf->Ptr(0);
       
  2163 	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg,
       
  2164 													 EMMFVideoRecordControllerReplaceMetaDataEntry,
       
  2165 													 bufData,
       
  2166 													 indexPckg));
       
  2167 	CleanupStack::PopAndDestroy(2);//s, buf
       
  2168 	}
       
  2169 
       
  2170 
       
  2171 EXPORT_C TInt RMMFVideoRecordControllerCustomCommands::SetMaxFileSize(TInt aMaxSize) const
       
  2172 	{
       
  2173 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  2174 	configPackage().iMaxFileSize = aMaxSize;
       
  2175 	return iController.CustomCommandSync(iDestinationPckg, 
       
  2176 										 EMMFVideoRecordControllerSetMaxFileSize, 
       
  2177 										 configPackage,
       
  2178 										 KNullDesC8);
       
  2179 	}
       
  2180 
       
  2181 EXPORT_C TInt RMMFVideoRecordControllerCustomCommands::SetVideoBitRate(TInt aRate) const
       
  2182 	{
       
  2183 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  2184  	configPackage().iVideoBitRate = aRate;
       
  2185 
       
  2186 	return iController.CustomCommandSync(iDestinationPckg, 
       
  2187 										 EMMFVideoRecordControllerSetVideoBitRate, 
       
  2188 										 configPackage,
       
  2189 										 KNullDesC8);
       
  2190 
       
  2191 	}
       
  2192 
       
  2193 EXPORT_C TInt RMMFVideoRecordControllerCustomCommands::SetAudioBitRate(TInt aRate) const
       
  2194 	{
       
  2195 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  2196  	configPackage().iAudioBitRate = aRate;
       
  2197 
       
  2198 	return iController.CustomCommandSync(iDestinationPckg, 
       
  2199 										 EMMFVideoRecordControllerSetAudioBitRate, 
       
  2200 										 configPackage,
       
  2201 										 KNullDesC8);
       
  2202 	}
       
  2203 
       
  2204 EXPORT_C TInt RMMFVideoRecordControllerCustomCommands::SetVideoFrameSize(TSize aSize) const
       
  2205 	{
       
  2206 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  2207  	configPackage().iVideoFrameSize = aSize;
       
  2208 
       
  2209 	return iController.CustomCommandSync(iDestinationPckg, 
       
  2210 										 EMMFVideoRecordControllerSetVideoFrameSize, 
       
  2211 										 configPackage,
       
  2212 										 KNullDesC8);
       
  2213 	}
       
  2214 
       
  2215 EXPORT_C TInt RMMFVideoRecordControllerCustomCommands::SetAudioEnabled(TBool aEnabled) const
       
  2216 	{
       
  2217 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  2218  	configPackage().iAudioEnabled = aEnabled;
       
  2219 
       
  2220 	return iController.CustomCommandSync(iDestinationPckg, 
       
  2221 										 EMMFVideoRecordControllerSetAudioEnabled, 
       
  2222 										 configPackage,
       
  2223 										 KNullDesC8);
       
  2224 	}
       
  2225 
       
  2226 EXPORT_C TInt RMMFVideoRecordControllerCustomCommands::Prepare() const
       
  2227 	{
       
  2228 
       
  2229 	return iController.CustomCommandSync(iDestinationPckg, 
       
  2230 										 EMMFVideoRecordControllerPrepare, 
       
  2231 										 KNullDesC8,
       
  2232 										 KNullDesC8);
       
  2233 	}
       
  2234 
       
  2235 EXPORT_C TInt RMMFVideoRecordControllerCustomCommands::SetCameraHandle(TInt aCameraHandle) const
       
  2236 	{
       
  2237 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  2238  	configPackage().iCameraHandle = aCameraHandle;
       
  2239 
       
  2240 	return iController.CustomCommandSync(iDestinationPckg, 
       
  2241 										 EMMFVideoRecordControllerSetCameraHandle, 
       
  2242 										 configPackage,
       
  2243 										 KNullDesC8);
       
  2244 	}
       
  2245 
       
  2246 EXPORT_C TInt RMMFVideoRecordControllerCustomCommands::GetRecordTimeAvailable(TTimeIntervalMicroSeconds& aTime) const
       
  2247 	{
       
  2248 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  2249 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
  2250 												EMMFVideoRecordControllerGetRecordTimeAvailable, 
       
  2251 												KNullDesC8,
       
  2252 												KNullDesC8,
       
  2253 												configPackage);
       
  2254 	if (!error)
       
  2255 		aTime = configPackage().iRecordTimeAvailable;
       
  2256 	return error;
       
  2257 	}
       
  2258 
       
  2259 EXPORT_C TInt RMMFVideoRecordControllerCustomCommands::GetSupportedSinkVideoTypes(CDesC8Array& aSupportedDataTypes) const
       
  2260 	{
       
  2261 	TInt err;
       
  2262 	TRAP(err, DoGetCDesC8ArrayL(aSupportedDataTypes, EMMFVideoRecordControllerGetSupportedSinkVideoTypes));
       
  2263 	return err;
       
  2264 	}
       
  2265 
       
  2266 EXPORT_C TInt RMMFVideoRecordControllerCustomCommands::GetSupportedSinkAudioTypes(RArray<TFourCC>& aSupportedDataTypes) const
       
  2267 	{
       
  2268 	TInt err;
       
  2269 	TRAP(err, DoGetFourCCArrayL(aSupportedDataTypes));
       
  2270 	return err;
       
  2271 	}
       
  2272 
       
  2273 
       
  2274 // New method as part of INC23777.
       
  2275 EXPORT_C TInt RMMFVideoRecordControllerCustomCommands::GetAudioEnabled(TBool& aEnabled) const
       
  2276 	{
       
  2277 	TPckgBuf<TMMFVideoConfig> configPackage;
       
  2278  	
       
  2279 	TInt err = iController.CustomCommandSync(iDestinationPckg, 
       
  2280 										 EMMFVideoRecordControllerGetAudioEnabled, 
       
  2281 										 KNullDesC8,
       
  2282 										 KNullDesC8,
       
  2283 										 configPackage);
       
  2284 
       
  2285 	if (!err)
       
  2286 		aEnabled = configPackage().iAudioEnabled;
       
  2287 	return err;
       
  2288 	}
       
  2289 
       
  2290 EXPORT_C CMMFVideoControllerCustomCommandParser* CMMFVideoControllerCustomCommandParser::NewL(MMMFVideoControllerCustomCommandImplementor& aImplementor)
       
  2291 	{
       
  2292 	return new(ELeave) CMMFVideoControllerCustomCommandParser(aImplementor);
       
  2293 	}
       
  2294 
       
  2295 EXPORT_C CMMFVideoControllerCustomCommandParser::~CMMFVideoControllerCustomCommandParser()
       
  2296 	{
       
  2297 	}
       
  2298 
       
  2299 CMMFVideoControllerCustomCommandParser::CMMFVideoControllerCustomCommandParser(MMMFVideoControllerCustomCommandImplementor& aImplementor) :
       
  2300 	CMMFCustomCommandParserBase(KUidInterfaceMMFVideoController),
       
  2301 	iImplementor(aImplementor)
       
  2302 	{
       
  2303 	}
       
  2304 
       
  2305 void CMMFVideoControllerCustomCommandParser::HandleRequest(TMMFMessage& aMessage)
       
  2306 	{
       
  2307 	if (aMessage.Destination().InterfaceId() == KUidInterfaceMMFVideoController)
       
  2308 		{
       
  2309 		TRAPD(error, DoHandleRequestL(aMessage));
       
  2310 		if (error)
       
  2311 			aMessage.Complete(error);
       
  2312 		}
       
  2313 	else
       
  2314 		{
       
  2315 		aMessage.Complete(KErrNotSupported);
       
  2316 		}
       
  2317 	}
       
  2318 
       
  2319 void CMMFVideoControllerCustomCommandParser::DoHandleRequestL(TMMFMessage& aMessage)
       
  2320 	{
       
  2321 	TBool complete = ETrue;
       
  2322 	switch (aMessage.Function())
       
  2323 		{
       
  2324 	case EMMFVideoControllerGetAudioBitRate:
       
  2325 		complete = DoGetAudioBitRateL(aMessage);
       
  2326 		break;
       
  2327 	case EMMFVideoControllerGetVideoBitRate:
       
  2328 		complete = DoGetVideoBitRateL(aMessage);
       
  2329 		break;
       
  2330 	case EMMFVideoControllerGetAudioCodec:
       
  2331 		complete = DoGetAudioCodecL(aMessage);
       
  2332 		break;
       
  2333 	case EMMFVideoControllerGetVideoFrameSize:
       
  2334 		complete = DoGetVideoFrameSizeL(aMessage);
       
  2335 		break;
       
  2336 	case EMMFVideoControllerSetFrameRate:
       
  2337 		complete = DoSetFrameRateL(aMessage);
       
  2338 		break;	
       
  2339 	case EMMFVideoControllerGetFrameRate:
       
  2340 		complete = DoGetFrameRateL(aMessage);
       
  2341 		break;
       
  2342 	case EMMFVideoControllerGetVideoMimeType:
       
  2343 		complete = DoGetVideoMimeTypeL(aMessage);
       
  2344 		break;
       
  2345 	default:
       
  2346 		User::Leave(KErrNotSupported);
       
  2347 		break;
       
  2348 		}
       
  2349 	if (complete)
       
  2350 		aMessage.Complete(KErrNone);
       
  2351 	}
       
  2352 
       
  2353 TBool CMMFVideoControllerCustomCommandParser::DoGetVideoFrameSizeL(TMMFMessage& aMessage)
       
  2354 	{
       
  2355 	TSize size;
       
  2356 	iImplementor.MvcGetVideoFrameSizeL(size);
       
  2357 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2358 	pckg().iVideoFrameSize = size;
       
  2359 	aMessage.WriteDataToClientL(pckg);
       
  2360 	return ETrue;
       
  2361 	}
       
  2362 
       
  2363 TBool CMMFVideoControllerCustomCommandParser::DoGetAudioCodecL(TMMFMessage& aMessage)
       
  2364 	{
       
  2365 	TFourCC audioCodec;
       
  2366 	iImplementor.MvcGetAudioCodecL(audioCodec);
       
  2367 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2368 	pckg().iAudioCodec = audioCodec;
       
  2369 	aMessage.WriteDataToClientL(pckg);
       
  2370 	return ETrue;
       
  2371 	}
       
  2372 
       
  2373 TBool CMMFVideoControllerCustomCommandParser::DoGetVideoBitRateL(TMMFMessage& aMessage)
       
  2374 	{
       
  2375 	TInt videoBitRate;
       
  2376 	iImplementor.MvcGetVideoBitRateL(videoBitRate);
       
  2377 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2378 	pckg().iVideoBitRate = videoBitRate;
       
  2379 	aMessage.WriteDataToClientL(pckg);
       
  2380 	return ETrue;
       
  2381 	}
       
  2382 
       
  2383 TBool CMMFVideoControllerCustomCommandParser::DoGetAudioBitRateL(TMMFMessage& aMessage)
       
  2384 	{
       
  2385 	TInt audioBitRate;
       
  2386 	iImplementor.MvcGetAudioBitRateL(audioBitRate);
       
  2387 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2388 	pckg().iAudioBitRate = audioBitRate;
       
  2389 	aMessage.WriteDataToClientL(pckg);
       
  2390 	return ETrue;
       
  2391 	}
       
  2392 
       
  2393 TBool CMMFVideoControllerCustomCommandParser::DoSetFrameRateL(TMMFMessage& aMessage)
       
  2394 	{
       
  2395 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2396 	aMessage.ReadData1FromClientL(pckg);
       
  2397 	iImplementor.MvcSetFrameRateL(pckg().iFramesPerSecond);
       
  2398 	return ETrue;
       
  2399 	}
       
  2400 
       
  2401 TBool CMMFVideoControllerCustomCommandParser::DoGetFrameRateL(TMMFMessage& aMessage)
       
  2402 	{
       
  2403 	TReal32 frameRate = 0;
       
  2404 	iImplementor.MvcGetFrameRateL(frameRate);
       
  2405 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2406 	pckg().iFramesPerSecond = frameRate;
       
  2407 	aMessage.WriteDataToClientL(pckg);
       
  2408 	return ETrue;
       
  2409 	}
       
  2410 
       
  2411 TBool CMMFVideoControllerCustomCommandParser::DoGetVideoMimeTypeL(TMMFMessage& aMessage)
       
  2412 	{
       
  2413 	TBuf8<KMaxMimeTypeLength> mimeType;
       
  2414 	iImplementor.MvcGetVideoMimeTypeL(mimeType);
       
  2415 	
       
  2416 	aMessage.WriteDataToClientL(mimeType);
       
  2417 	return ETrue;
       
  2418 	}
       
  2419 
       
  2420 
       
  2421 TBool CMMFVideoRecordControllerCustomCommandParser::DoGetSupportedSinkAudioTypesL(TMMFMessage& aMessage)
       
  2422 	{
       
  2423 	RArray<TFourCC> array;
       
  2424 	CleanupClosePushL(array);
       
  2425 	iImplementor.MvrcGetSupportedSinkAudioTypesL(array);
       
  2426 
       
  2427 	DoCreateBufFromFourCCArrayL(array);
       
  2428 
       
  2429 	TPckgBuf<TInt> pckg;
       
  2430 	pckg() = array.Count();
       
  2431 	aMessage.WriteDataToClientL(pckg);
       
  2432 
       
  2433 	CleanupStack::PopAndDestroy();//array
       
  2434 	return ETrue;
       
  2435 	}
       
  2436 
       
  2437 
       
  2438 TBool CMMFVideoRecordControllerCustomCommandParser::DoGetSupportedSinkVideoTypesL(TMMFMessage& aMessage)
       
  2439 	{
       
  2440 	CDesC8ArrayFlat* array = new (ELeave) CDesC8ArrayFlat(KBufMimeTypeGranularity);
       
  2441 	CleanupStack::PushL(array);
       
  2442 
       
  2443 	iImplementor.MvrcGetSupportedSinkVideoTypesL(*array);
       
  2444 
       
  2445 	TInt32 len = DoCreateBufFromCDesC8ArrayL(*array);
       
  2446 
       
  2447 	TPckgBuf<TMimeTypeBufferInfo> pckg;
       
  2448 	pckg().count = array->Count();
       
  2449 	pckg().bufferLen = len;
       
  2450 	
       
  2451 	aMessage.WriteDataToClientL(pckg);
       
  2452 
       
  2453 	CleanupStack::PopAndDestroy();//array
       
  2454 	return ETrue;
       
  2455 	}
       
  2456 
       
  2457 void CMMFVideoRecordControllerCustomCommandParser::DoCreateBufFromFourCCArrayL(RArray<TFourCC>& aArray)
       
  2458 	{
       
  2459 	delete iDataCopyBuffer;
       
  2460 	iDataCopyBuffer = NULL;
       
  2461 
       
  2462 	iDataCopyBuffer = CBufFlat::NewL(KBufExpandSize8);
       
  2463 	RBufWriteStream stream;
       
  2464 	stream.Open(*iDataCopyBuffer);
       
  2465 	CleanupClosePushL(stream);
       
  2466 	for (TInt i=0;i<aArray.Count();i++)
       
  2467 		{
       
  2468 		stream.WriteInt32L(aArray[i].FourCC());
       
  2469 		}
       
  2470 	CleanupStack::PopAndDestroy();//stream
       
  2471 	}
       
  2472 
       
  2473 TInt32 CMMFVideoRecordControllerCustomCommandParser::DoCreateBufFromCDesC8ArrayL(CDesC8Array& aArray)
       
  2474 	{
       
  2475 	TInt32 bufferLen = 0;
       
  2476 	TInt32 len = 0;
       
  2477 
       
  2478 	delete iDataCopyBuffer;
       
  2479 	iDataCopyBuffer = NULL;
       
  2480 
       
  2481 	iDataCopyBuffer = CBufFlat::NewL(KBufExpandSize8);
       
  2482 	RBufWriteStream stream;
       
  2483 	stream.Open(*iDataCopyBuffer);
       
  2484 	CleanupClosePushL(stream);
       
  2485 	for (TInt i = 0; i < aArray.Count(); i++)
       
  2486 		{
       
  2487 		len = aArray[i].Length();
       
  2488 		stream.WriteInt32L(len);
       
  2489 		stream.WriteL(aArray[i]);
       
  2490 
       
  2491 		bufferLen += (len + sizeof(TInt32));;	// get a cumulative total buffer size
       
  2492 		}
       
  2493 	CleanupStack::PopAndDestroy();//stream
       
  2494 
       
  2495 	return bufferLen;
       
  2496 	}
       
  2497 
       
  2498 
       
  2499 // --------------------------------------------------------------------------------
       
  2500 EXPORT_C RMMFVideoPlayControllerCustomCommands::RMMFVideoPlayControllerCustomCommands(RMMFController& aController) :
       
  2501 	RMMFCustomCommandsBase(aController, KUidInterfaceMMFVideoPlayController)
       
  2502 	{
       
  2503 	}
       
  2504 
       
  2505 EXPORT_C CMMFVideoPlayControllerCustomCommandParser* CMMFVideoPlayControllerCustomCommandParser::NewL(MMMFVideoPlayControllerCustomCommandImplementor& aImplementor)
       
  2506 	{
       
  2507 	return new(ELeave) CMMFVideoPlayControllerCustomCommandParser(aImplementor);
       
  2508 	}
       
  2509 
       
  2510 EXPORT_C CMMFVideoPlayControllerCustomCommandParser::~CMMFVideoPlayControllerCustomCommandParser()
       
  2511 	{
       
  2512 	delete iVideoFrameMessage;
       
  2513 	}
       
  2514 
       
  2515 CMMFVideoPlayControllerCustomCommandParser::CMMFVideoPlayControllerCustomCommandParser(MMMFVideoPlayControllerCustomCommandImplementor& aImplementor) :
       
  2516 	CMMFCustomCommandParserBase(KUidInterfaceMMFVideoPlayController),
       
  2517 	iImplementor(aImplementor)
       
  2518 	{
       
  2519 	}
       
  2520 
       
  2521 void CMMFVideoPlayControllerCustomCommandParser::HandleRequest(TMMFMessage& aMessage)
       
  2522 	{
       
  2523 	if (aMessage.Destination().InterfaceId() == KUidInterfaceMMFVideoPlayController)
       
  2524 		{
       
  2525 		TRAPD(error, DoHandleRequestL(aMessage));
       
  2526 		if (error)
       
  2527 			aMessage.Complete(error);
       
  2528 		}
       
  2529 	else
       
  2530 		{
       
  2531 		aMessage.Complete(KErrNotSupported);
       
  2532 		}
       
  2533 	}
       
  2534 
       
  2535 void CMMFVideoPlayControllerCustomCommandParser::DoHandleRequestL(TMMFMessage& aMessage)
       
  2536 	{
       
  2537 	TBool complete = ETrue;
       
  2538 	switch (aMessage.Function())
       
  2539 		{
       
  2540 	case EMMFVideoPlayControllerGetFrame:
       
  2541 		complete = DoGetFrameL(aMessage);
       
  2542 		break;
       
  2543 	case EMMFVideoPlayControllerSetDisplayWindow:
       
  2544 		complete = DoSetDisplayWindowL(aMessage);
       
  2545 		break;
       
  2546 	case EMMFVideoPlayControllerGetAudioEnabled:
       
  2547 		complete = DoGetAudioEnabledL(aMessage);
       
  2548 		break;
       
  2549 	case EMMFVideoPlayControllerUpdateDisplayRegion:
       
  2550 		complete = DoUpdateDisplayRegionL(aMessage);
       
  2551 		break;
       
  2552 	case EMMFVideoPlayControllerDSAEvent:
       
  2553 		complete = DoDirectScreenAccessEventL(aMessage);
       
  2554 		break;
       
  2555 	case EMMFVideoPlayControllerPlay:
       
  2556 		complete = DoPlayL(aMessage);
       
  2557 		break;
       
  2558 	case EMMFVideoPlayControllerRefreshFrame:
       
  2559 		complete = DoRefreshFrameL(aMessage);
       
  2560 		break;
       
  2561 	case EMMFVideoPlayControllerGetLoadingProgress:
       
  2562 		complete = DoGetLoadingProgressL(aMessage);
       
  2563 		break;
       
  2564 	case EMMFVideoPlayControllerPrepare:
       
  2565 		complete = DoPrepareL(aMessage);
       
  2566 		break;
       
  2567 	case EMMFVideoPlayControllerSetRotation:
       
  2568 		complete = DoSetRotationL(aMessage);
       
  2569 		break;
       
  2570 	case EMMFVideoPlayControllerGetRotation:
       
  2571 		complete = DoGetRotationL(aMessage);
       
  2572 		break;
       
  2573 	case EMMFVideoPlayControllerSetScaleFactor:
       
  2574 		complete = DoSetScaleFactorL(aMessage);
       
  2575 		break;
       
  2576 	case EMMFVideoPlayControllerGetScaleFactor:
       
  2577 		complete = DoGetScaleFactorL(aMessage);
       
  2578 		break;
       
  2579 	case EMMFVideoPlayControllerSetCropRegion:
       
  2580 		complete = DoSetCropRegionL(aMessage);
       
  2581 		break;
       
  2582 	case EMMFVideoPlayControllerGetCropRegion:
       
  2583 		complete = DoGetCropRegionL(aMessage);
       
  2584 		break;
       
  2585 
       
  2586 	default:
       
  2587 		User::Leave(KErrNotSupported);
       
  2588 		break;
       
  2589 		}
       
  2590 	if (complete)
       
  2591 		aMessage.Complete(KErrNone);
       
  2592 	}
       
  2593 
       
  2594 TBool CMMFVideoPlayControllerCustomCommandParser::DoUpdateDisplayRegionL(TMMFMessage& aMessage)
       
  2595 	{
       
  2596 	TPckgBuf<TInt> numberOfRectsPckg;
       
  2597 	aMessage.ReadData1FromClientL(numberOfRectsPckg);
       
  2598 	TUint rectSize = numberOfRectsPckg() * sizeof(TRect);
       
  2599 	TUint8* rectMemory = STATIC_CAST(TUint8*, User::AllocLC(rectSize));
       
  2600 	TPtr8 rectMemoryPtr(rectMemory,rectSize);
       
  2601 	aMessage.ReadData2FromClientL(rectMemoryPtr);
       
  2602 	TRect* rects = REINTERPRET_CAST(TRect*, rectMemory);
       
  2603 	RRegion region(numberOfRectsPckg(), rects);
       
  2604 	CleanupStack::Pop(rectMemory); // rectMemory now owned by region
       
  2605 	CleanupClosePushL(region);
       
  2606 	iImplementor.MvpcUpdateDisplayRegionL(region);
       
  2607 	CleanupStack::PopAndDestroy();//region
       
  2608 
       
  2609 	return ETrue;
       
  2610 	}
       
  2611 
       
  2612 TBool CMMFVideoPlayControllerCustomCommandParser::DoGetFrameL(TMMFMessage& aMessage)
       
  2613 	{
       
  2614 	delete iVideoFrameMessage;
       
  2615 	iVideoFrameMessage = NULL;
       
  2616 
       
  2617 	iVideoFrameMessage = CMMFVideoFrameMessage::NewL(aMessage);
       
  2618 	iImplementor.MvpcGetFrameL(*iVideoFrameMessage);
       
  2619 	return EFalse;
       
  2620 	}
       
  2621 
       
  2622 TBool CMMFVideoPlayControllerCustomCommandParser::DoSetDisplayWindowL(TMMFMessage& aMessage)
       
  2623 	{
       
  2624 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2625 	aMessage.ReadData1FromClientL(pckg);
       
  2626 	iImplementor.MvpcSetDisplayWindowL(pckg().iWindowRect, pckg().iClipRect);
       
  2627 	return ETrue;
       
  2628 	}
       
  2629 
       
  2630 TBool CMMFVideoPlayControllerCustomCommandParser::DoGetAudioEnabledL(TMMFMessage& aMessage)
       
  2631 	{
       
  2632 	TBool enabled;
       
  2633 	iImplementor.MvpcGetAudioEnabledL(enabled);
       
  2634 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2635 	pckg().iAudioEnabled = enabled;
       
  2636 	aMessage.WriteDataToClientL(pckg);
       
  2637 	return ETrue;
       
  2638 	}
       
  2639 
       
  2640 TBool CMMFVideoPlayControllerCustomCommandParser::DoDirectScreenAccessEventL(TMMFMessage& aMessage)
       
  2641 	{
       
  2642 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2643 	aMessage.ReadData1FromClientL(pckg);
       
  2644 	iImplementor.MvpcDirectScreenAccessEventL((TMMFDSAEvent)pckg().iDSAEvent);
       
  2645 	return ETrue;
       
  2646 	}
       
  2647 	
       
  2648 TBool CMMFVideoPlayControllerCustomCommandParser::DoPlayL(TMMFMessage& aMessage)
       
  2649 	{
       
  2650 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2651 	aMessage.ReadData1FromClientL(pckg);
       
  2652 	iImplementor.MvpcPlayL(pckg().iStartPosition, pckg().iEndPosition);
       
  2653 	return ETrue;
       
  2654 	}
       
  2655 
       
  2656 TBool CMMFVideoPlayControllerCustomCommandParser::DoRefreshFrameL(TMMFMessage& /*aMessage*/)
       
  2657 	{
       
  2658 	iImplementor.MvpcRefreshFrameL();
       
  2659 	return ETrue;
       
  2660 	}
       
  2661 	
       
  2662 TBool CMMFVideoPlayControllerCustomCommandParser::DoGetLoadingProgressL(TMMFMessage& aMessage)
       
  2663 	{
       
  2664 	TInt progress;
       
  2665 	iImplementor.MvpcGetLoadingProgressL(progress);
       
  2666 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2667 	pckg().iLoadingCompletePercentage = progress;
       
  2668 	aMessage.WriteDataToClientL(pckg);
       
  2669 	return ETrue;
       
  2670 	}
       
  2671 
       
  2672 TBool CMMFVideoPlayControllerCustomCommandParser::DoPrepareL(TMMFMessage& /*aMessage*/)
       
  2673 	{
       
  2674 	iImplementor.MvpcPrepare();
       
  2675 	return ETrue;
       
  2676 	}
       
  2677 
       
  2678 TBool CMMFVideoPlayControllerCustomCommandParser::DoSetRotationL(TMMFMessage& aMessage)
       
  2679 	{
       
  2680 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2681 	aMessage.ReadData1FromClientL(pckg);
       
  2682 	iImplementor.MvpcSetRotationL(pckg().iVideoRotation);
       
  2683 	return ETrue;
       
  2684 	}
       
  2685 
       
  2686 TBool CMMFVideoPlayControllerCustomCommandParser::DoGetRotationL(TMMFMessage& aMessage)
       
  2687 	{
       
  2688 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2689 	iImplementor.MvpcGetRotationL(pckg().iVideoRotation);
       
  2690 	aMessage.WriteDataToClientL(pckg);
       
  2691 	return ETrue;
       
  2692 	}
       
  2693 
       
  2694 TBool CMMFVideoPlayControllerCustomCommandParser::DoSetScaleFactorL(TMMFMessage& aMessage)
       
  2695 	{
       
  2696 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2697 	aMessage.ReadData1FromClientL(pckg);
       
  2698 	iImplementor.MvpcSetScaleFactorL(pckg().iWidthScalePercentage, pckg().iHeightScalePercentage, pckg().iAntiAliasFiltering);
       
  2699 	return ETrue;
       
  2700 	}
       
  2701 
       
  2702 TBool CMMFVideoPlayControllerCustomCommandParser::DoGetScaleFactorL(TMMFMessage& aMessage)
       
  2703 	{
       
  2704 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2705 	iImplementor.MvpcGetScaleFactorL(pckg().iWidthScalePercentage, pckg().iHeightScalePercentage, pckg().iAntiAliasFiltering);
       
  2706 	aMessage.WriteDataToClientL(pckg);
       
  2707 	return ETrue;
       
  2708 	}
       
  2709 
       
  2710 TBool CMMFVideoPlayControllerCustomCommandParser::DoSetCropRegionL(TMMFMessage& aMessage)
       
  2711 	{
       
  2712 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2713 	aMessage.ReadData1FromClientL(pckg);
       
  2714 	iImplementor.MvpcSetCropRegionL(pckg().iCropRectangle);
       
  2715 	return ETrue;
       
  2716 	}
       
  2717 
       
  2718 TBool CMMFVideoPlayControllerCustomCommandParser::DoGetCropRegionL(TMMFMessage& aMessage)
       
  2719 	{
       
  2720 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2721 	iImplementor.MvpcGetCropRegionL(pckg().iCropRectangle);
       
  2722 	aMessage.WriteDataToClientL(pckg);
       
  2723 	return ETrue;
       
  2724 	}
       
  2725 
       
  2726 // --------------------------------------------------------------------------------
       
  2727 EXPORT_C CMMFVideoRecordControllerCustomCommandParser* CMMFVideoRecordControllerCustomCommandParser::NewL(MMMFVideoRecordControllerCustomCommandImplementor& aImplementor)
       
  2728 	{
       
  2729 	return new(ELeave) CMMFVideoRecordControllerCustomCommandParser(aImplementor);
       
  2730 	}
       
  2731 
       
  2732 EXPORT_C CMMFVideoRecordControllerCustomCommandParser::~CMMFVideoRecordControllerCustomCommandParser()
       
  2733 	{
       
  2734 	delete iDataCopyBuffer;
       
  2735 	}
       
  2736 
       
  2737 CMMFVideoRecordControllerCustomCommandParser::CMMFVideoRecordControllerCustomCommandParser(MMMFVideoRecordControllerCustomCommandImplementor& aImplementor) :
       
  2738 	CMMFCustomCommandParserBase(KUidInterfaceMMFVideoRecordController),
       
  2739 	iImplementor(aImplementor)
       
  2740 	{
       
  2741 	}
       
  2742 
       
  2743 void CMMFVideoRecordControllerCustomCommandParser::HandleRequest(TMMFMessage& aMessage)
       
  2744 	{
       
  2745 	if (aMessage.Destination().InterfaceId() == KUidInterfaceMMFVideoRecordController)
       
  2746 		{
       
  2747 		TRAPD(error, DoHandleRequestL(aMessage));
       
  2748 		if (error)
       
  2749 			aMessage.Complete(error);
       
  2750 		}
       
  2751 	else
       
  2752 		{
       
  2753 		aMessage.Complete(KErrNotSupported);
       
  2754 		}
       
  2755 	}
       
  2756 
       
  2757 void CMMFVideoRecordControllerCustomCommandParser::DoHandleRequestL(TMMFMessage& aMessage)
       
  2758 	{
       
  2759 	TBool complete = ETrue;
       
  2760 	switch (aMessage.Function())
       
  2761 		{
       
  2762 	case EMMFVideoRecordControllerSetVideoFormat:
       
  2763 		complete = DoSetVideoFormatL(aMessage);
       
  2764 		break;
       
  2765 	case EMMFVideoRecordControllerSetAudioBitRate:
       
  2766 		complete = DoSetAudioBitRateL(aMessage);
       
  2767 		break;
       
  2768 	case EMMFVideoRecordControllerSetVideoBitRate:
       
  2769 		complete = DoSetVideoBitRateL(aMessage);
       
  2770 		break;
       
  2771 	case EMMFVideoRecordControllerSetAudioCodec:
       
  2772 		complete = DoSetAudioCodecL(aMessage);
       
  2773 		break;
       
  2774 	case EMMFVideoRecordControllerSetVideoCodec:
       
  2775 		complete = DoSetVideoCodecL(aMessage);
       
  2776 		break;
       
  2777 	case EMMFVideoRecordControllerAddMetaDataEntry:
       
  2778 		complete = DoAddMetaDataEntryL(aMessage);
       
  2779 		break;
       
  2780 	case EMMFVideoRecordControllerRemoveMetaDataEntry:
       
  2781 		complete = DoRemoveMetaDataEntryL(aMessage);
       
  2782 		break;
       
  2783 	case EMMFVideoRecordControllerReplaceMetaDataEntry:
       
  2784 		complete = DoReplaceMetaDataEntryL(aMessage);
       
  2785 		break;
       
  2786 	case EMMFVideoRecordControllerSetMaxFileSize:
       
  2787 		complete = DoSetMaxFileSizeL(aMessage);
       
  2788 		break;
       
  2789 	case EMMFVideoRecordControllerSetVideoFrameSize:
       
  2790 		complete = DoSetVideoFrameSizeL(aMessage);
       
  2791 		break;
       
  2792 	case EMMFVideoRecordControllerSetAudioEnabled:
       
  2793 		complete = DoSetAudioEnabledL(aMessage);
       
  2794 		break;
       
  2795 	case EMMFVideoRecordControllerPrepare:
       
  2796 		complete = DoPrepareL(aMessage);
       
  2797 		break;
       
  2798 	case EMMFVideoRecordControllerSetCameraHandle:
       
  2799 		complete = DoSetCameraHandleL(aMessage);
       
  2800 		break;
       
  2801 	case EMMFVideoRecordControllerGetRecordTimeAvailable:
       
  2802 		complete = DoGetRecordTimeAvailableL(aMessage);
       
  2803 		break;
       
  2804 	case EMMFVideoRecordControllerGetSupportedSinkAudioTypes:
       
  2805 		complete = DoGetSupportedSinkAudioTypesL(aMessage);
       
  2806 		break;
       
  2807 	case EMMFVideoRecordControllerGetSupportedSinkVideoTypes:
       
  2808 		complete = DoGetSupportedSinkVideoTypesL(aMessage);
       
  2809 		break;
       
  2810 	case EMMFVideoRecordControllerCopyDescriptorArrayData:
       
  2811 		complete = DoCopyCDesC8ArrayDataL(aMessage);
       
  2812 		break;
       
  2813 	case EMMFVideoRecordControllerCopyFourCCArrayData:
       
  2814 		complete = DoCopyFourCCArrayDataL(aMessage);
       
  2815 		break;
       
  2816 	case EMMFVideoRecordControllerGetAudioEnabled:  //INC23777
       
  2817 		complete = DoGetAudioEnabledL(aMessage);
       
  2818 		break;
       
  2819 	default:
       
  2820 		User::Leave(KErrNotSupported);
       
  2821 		break;
       
  2822 		}
       
  2823 	if (complete)
       
  2824 		aMessage.Complete(KErrNone);
       
  2825 	}
       
  2826 
       
  2827 
       
  2828 
       
  2829 
       
  2830 
       
  2831 TBool CMMFVideoRecordControllerCustomCommandParser::DoSetVideoBitRateL(TMMFMessage& aMessage)
       
  2832 	{
       
  2833 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2834 	aMessage.ReadData1FromClientL(pckg);
       
  2835 	iImplementor.MvrcSetVideoBitRateL(pckg().iVideoBitRate);
       
  2836 	return ETrue;
       
  2837 	}
       
  2838 
       
  2839 TBool CMMFVideoRecordControllerCustomCommandParser::DoSetAudioBitRateL(TMMFMessage& aMessage)
       
  2840 	{
       
  2841 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2842 	aMessage.ReadData1FromClientL(pckg);
       
  2843 	iImplementor.MvrcSetAudioBitRateL(pckg().iAudioBitRate);
       
  2844 	return ETrue;
       
  2845 	}
       
  2846 
       
  2847 
       
  2848 TBool CMMFVideoRecordControllerCustomCommandParser::DoSetVideoCodecL(TMMFMessage& aMessage)
       
  2849 	{
       
  2850 	TBuf8<KMaxMimeTypeLength> buf;
       
  2851 	aMessage.ReadData1FromClientL(buf);
       
  2852 	iImplementor.MvrcSetVideoCodecL(buf);
       
  2853 	return ETrue;
       
  2854 	}
       
  2855 
       
  2856 TBool CMMFVideoRecordControllerCustomCommandParser::DoSetAudioCodecL(TMMFMessage& aMessage)
       
  2857 	{
       
  2858 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2859 	aMessage.ReadData1FromClientL(pckg);
       
  2860 	iImplementor.MvrcSetAudioCodecL(pckg().iAudioCodec);
       
  2861 	return ETrue;
       
  2862 	}
       
  2863 
       
  2864 
       
  2865 TBool CMMFVideoRecordControllerCustomCommandParser::DoSetVideoFormatL(TMMFMessage& aMessage)
       
  2866 	{
       
  2867 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2868 	aMessage.ReadData1FromClientL(pckg);
       
  2869 	iImplementor.MvrcSetVideoFormatL(pckg().iFormatUid);
       
  2870 	return ETrue;
       
  2871 	}
       
  2872 
       
  2873 
       
  2874 
       
  2875 
       
  2876 TBool CMMFVideoRecordControllerCustomCommandParser::DoAddMetaDataEntryL(TMMFMessage& aMessage)
       
  2877 	{
       
  2878 	TInt bufSize = aMessage.SizeOfData1FromClient();
       
  2879 	// Leaving here in order to prevent a panic in the NewLC if the value is negative
       
  2880 	User::LeaveIfError(bufSize); 
       
  2881 	HBufC8* buf = HBufC8::NewLC(bufSize);
       
  2882 	TPtr8 ptr = buf->Des();
       
  2883 	aMessage.ReadData1FromClientL(ptr);
       
  2884 	RDesReadStream stream;
       
  2885 	stream.Open(ptr);
       
  2886 	CleanupClosePushL(stream);
       
  2887 	CMMFMetaDataEntry* metaData = CMMFMetaDataEntry::NewL();
       
  2888 	CleanupStack::PushL(metaData);
       
  2889 	metaData->InternalizeL(stream);
       
  2890 	iImplementor.MvrcAddMetaDataEntryL(*metaData);
       
  2891 	CleanupStack::PopAndDestroy(3);//metaData, stream, buf
       
  2892 	return ETrue;
       
  2893 	}
       
  2894 
       
  2895 TBool CMMFVideoRecordControllerCustomCommandParser::DoRemoveMetaDataEntryL(TMMFMessage& aMessage)
       
  2896 	{
       
  2897 	TPckgBuf<TInt> pckg;
       
  2898 	aMessage.ReadData1FromClientL(pckg);
       
  2899 	iImplementor.MvrcRemoveMetaDataEntryL(pckg());
       
  2900 	return ETrue;
       
  2901 	}
       
  2902 
       
  2903 TBool CMMFVideoRecordControllerCustomCommandParser::DoReplaceMetaDataEntryL(TMMFMessage& aMessage)
       
  2904 	{
       
  2905 	// Get new meta data
       
  2906 	TInt bufSize = aMessage.SizeOfData1FromClient();
       
  2907 	// Leaving here in order to prevent a panic in the NewLC if the value is negative
       
  2908 	User::LeaveIfError(bufSize); 
       
  2909 	HBufC8* buf = HBufC8::NewLC(bufSize);
       
  2910 	TPtr8 ptr = buf->Des();
       
  2911 	aMessage.ReadData1FromClientL(ptr);
       
  2912 	RDesReadStream stream;
       
  2913 	stream.Open(ptr);
       
  2914 	CleanupClosePushL(stream);
       
  2915 	CMMFMetaDataEntry* metaData = CMMFMetaDataEntry::NewL();
       
  2916 	CleanupStack::PushL(metaData);
       
  2917 	metaData->InternalizeL(stream);
       
  2918 
       
  2919 	// Get index to replace
       
  2920 	TPckgBuf<TInt> indexPckg;
       
  2921 	aMessage.ReadData2FromClientL(indexPckg);
       
  2922 	
       
  2923 	iImplementor.MvrcReplaceMetaDataEntryL(indexPckg(), *metaData);
       
  2924 
       
  2925 	CleanupStack::PopAndDestroy(3);//metaData, stream, buf
       
  2926 	return ETrue;
       
  2927 	}
       
  2928 
       
  2929 TBool CMMFVideoRecordControllerCustomCommandParser::DoSetMaxFileSizeL(TMMFMessage& aMessage)
       
  2930 	{
       
  2931 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2932 	aMessage.ReadData1FromClientL(pckg);
       
  2933 	iImplementor.MvrcSetMaxFileSizeL(pckg().iMaxFileSize);
       
  2934 	return ETrue;
       
  2935 	}
       
  2936 
       
  2937 TBool CMMFVideoRecordControllerCustomCommandParser::DoSetVideoFrameSizeL(TMMFMessage& aMessage)
       
  2938 	{
       
  2939 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2940 	aMessage.ReadData1FromClientL(pckg);
       
  2941 	iImplementor.MvrcSetVideoFrameSizeL(pckg().iVideoFrameSize);
       
  2942 	return ETrue;
       
  2943 	}
       
  2944 
       
  2945 TBool CMMFVideoRecordControllerCustomCommandParser::DoSetAudioEnabledL(TMMFMessage& aMessage)
       
  2946 	{
       
  2947 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2948 	aMessage.ReadData1FromClientL(pckg);
       
  2949 	iImplementor.MvrcSetAudioEnabledL(pckg().iAudioEnabled);
       
  2950 	return ETrue;
       
  2951 	}
       
  2952 
       
  2953 TBool CMMFVideoRecordControllerCustomCommandParser::DoPrepareL(TMMFMessage& /*aMessage*/)
       
  2954 	{
       
  2955 	iImplementor.MvrcPrepareL();
       
  2956 	return ETrue;
       
  2957 	}
       
  2958 
       
  2959 TBool CMMFVideoRecordControllerCustomCommandParser::DoSetCameraHandleL(TMMFMessage& aMessage)
       
  2960 	{
       
  2961 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2962 	aMessage.ReadData1FromClientL(pckg);
       
  2963 	iImplementor.MvrcSetCameraHandleL(pckg().iCameraHandle);
       
  2964 	return ETrue;
       
  2965 	}
       
  2966 
       
  2967 TBool CMMFVideoRecordControllerCustomCommandParser::DoGetRecordTimeAvailableL(TMMFMessage& aMessage)
       
  2968 	{
       
  2969 	TTimeIntervalMicroSeconds time;
       
  2970 	iImplementor.MvrcGetRecordTimeAvailableL(time);
       
  2971 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2972 	pckg().iRecordTimeAvailable = time;
       
  2973 	aMessage.WriteDataToClientL(pckg);
       
  2974 	return ETrue;
       
  2975 	}
       
  2976 
       
  2977 TBool CMMFVideoRecordControllerCustomCommandParser::DoCopyFourCCArrayDataL(TMMFMessage& aMessage)
       
  2978 	{
       
  2979 	if (!iDataCopyBuffer)
       
  2980 		User::Leave(KErrNotReady);
       
  2981 	aMessage.WriteDataToClientL(iDataCopyBuffer->Ptr(0));
       
  2982 	return ETrue;
       
  2983 	}
       
  2984 
       
  2985 //INC23777
       
  2986 TBool CMMFVideoRecordControllerCustomCommandParser::DoGetAudioEnabledL(TMMFMessage& aMessage)
       
  2987 	{
       
  2988 	TBool enabled;
       
  2989 	iImplementor.MvrcGetAudioEnabledL(enabled);
       
  2990 	TPckgBuf<TMMFVideoConfig> pckg;
       
  2991 	pckg().iAudioEnabled = enabled;
       
  2992 	aMessage.WriteDataToClientL(pckg);
       
  2993 	return ETrue;
       
  2994 	}
       
  2995 
       
  2996 //--------------------------------------------------------------------------------------
       
  2997 EXPORT_C CMMFVideoDRMExtCustomCommandParser* CMMFVideoDRMExtCustomCommandParser::NewL(MMMFVideoDRMExtCustomCommandImplementor& aImplementor)
       
  2998 	{
       
  2999 	return new(ELeave) CMMFVideoDRMExtCustomCommandParser(aImplementor);
       
  3000 	}
       
  3001 
       
  3002 EXPORT_C CMMFVideoDRMExtCustomCommandParser::~CMMFVideoDRMExtCustomCommandParser()
       
  3003 	{
       
  3004 	delete iVideoFrameMessage;
       
  3005 	}
       
  3006 
       
  3007 CMMFVideoDRMExtCustomCommandParser::CMMFVideoDRMExtCustomCommandParser(MMMFVideoDRMExtCustomCommandImplementor& aImplementor) :
       
  3008 	CMMFCustomCommandParserBase(KUidInterfaceMMFVideoDRMExt),
       
  3009 	iImplementor(aImplementor)
       
  3010 	{
       
  3011 	}
       
  3012 
       
  3013 void CMMFVideoDRMExtCustomCommandParser::HandleRequest(TMMFMessage& aMessage)
       
  3014 	{
       
  3015 	if (aMessage.Destination().InterfaceId() == KUidInterfaceMMFVideoDRMExt)
       
  3016 		{
       
  3017 		switch (aMessage.Function())
       
  3018 			{
       
  3019 		case EMMFVideoDRMExtGetFrame:
       
  3020 			TRAPD(err, DoGetFrameL(aMessage));
       
  3021 			if (err!=KErrNone) // asynchronous, so only complete message if error occurred
       
  3022 				aMessage.Complete(err);
       
  3023 			break;
       
  3024 		default:
       
  3025 			aMessage.Complete(KErrNotSupported);
       
  3026 			break;
       
  3027 			}
       
  3028 		}
       
  3029 	else
       
  3030 		{
       
  3031 		aMessage.Complete(KErrNotSupported);
       
  3032 		}
       
  3033 	}
       
  3034 
       
  3035 void CMMFVideoDRMExtCustomCommandParser::DoGetFrameL(TMMFMessage& aMessage)
       
  3036 	{
       
  3037 	delete iVideoFrameMessage;
       
  3038 	iVideoFrameMessage = NULL;
       
  3039 
       
  3040 	iVideoFrameMessage = CMMFVideoFrameMessage::NewL(aMessage);
       
  3041 	TPckgBuf<ContentAccess::TIntent> intentPckg;
       
  3042 	aMessage.ReadData2FromClientL(intentPckg);
       
  3043 	iImplementor.MvdeGetFrameL(*iVideoFrameMessage, intentPckg());
       
  3044 	}
       
  3045 
       
  3046 EXPORT_C RMMFVideoDRMExtCustomCommands::RMMFVideoDRMExtCustomCommands(RMMFController& aController) :
       
  3047 	RMMFCustomCommandsBase(aController, KUidInterfaceMMFVideoDRMExt)
       
  3048 	{
       
  3049 	}
       
  3050 
       
  3051 EXPORT_C void RMMFVideoDRMExtCustomCommands::GetFrame(CFbsBitmap& aBitmap, ContentAccess::TIntent aIntent, TRequestStatus& aStatus)
       
  3052 	{
       
  3053 	iConfigPackage().iFrameBitmapServerHandle = aBitmap.Handle();
       
  3054 	iIntentPackage() = aIntent;
       
  3055 	iController.CustomCommandAsync(iDestinationPckg, 
       
  3056 								   EMMFVideoDRMExtGetFrame, 
       
  3057 								   iConfigPackage,
       
  3058 								   iIntentPackage,
       
  3059 								   aStatus);
       
  3060 	}
       
  3061 
       
  3062 //------------------------------------------------------------------------------
       
  3063 EXPORT_C RMMFResourceNotificationCustomCommands::RMMFResourceNotificationCustomCommands(RMMFController& aController) : 
       
  3064 RMMFCustomCommandsBase(aController,KMMFEventCategoryAudioResourceAvailable)
       
  3065 	{
       
  3066 	}
       
  3067 
       
  3068 EXPORT_C TInt RMMFResourceNotificationCustomCommands::RegisterAsClient(TUid aEventType,const TDesC8& aNotificationRegistrationData)
       
  3069 	{
       
  3070 	TPckgBuf<TMMFAudioConfig> configPackage;
       
  3071 	configPackage().iEventType = aEventType;
       
  3072 	configPackage().iNotificationRegistrationData = aNotificationRegistrationData;
       
  3073 	return iController.CustomCommandSync(iDestinationPckg, 
       
  3074 										EMMFAudioResourceRegisterNotification, 
       
  3075 										configPackage,
       
  3076 										KNullDesC8);
       
  3077 	}
       
  3078 	
       
  3079 EXPORT_C TInt RMMFResourceNotificationCustomCommands::CancelRegisterAsClient(TUid aEventType)
       
  3080 	{
       
  3081  	TPckgBuf<TMMFAudioConfig> configPackage;
       
  3082  	configPackage().iEventType = aEventType;
       
  3083  	return iController.CustomCommandSync(iDestinationPckg, 
       
  3084 										EMMFAudioResourceCancelRegisterNotification, 
       
  3085 										configPackage,
       
  3086 										KNullDesC8);
       
  3087 
       
  3088 	}
       
  3089 
       
  3090 EXPORT_C TInt RMMFResourceNotificationCustomCommands::GetResourceNotificationData(TUid aEventType,TDes8& aNotificationData)
       
  3091 	{	
       
  3092 	TPckgBuf<TMMFAudioConfig> configPackage;
       
  3093  	configPackage().iEventType = aEventType;
       
  3094 	return iController.CustomCommandSync(iDestinationPckg, 
       
  3095 										EMMFAudioResourceGetNotificationData, 
       
  3096 										configPackage,
       
  3097 										KNullDesC8,
       
  3098 										aNotificationData);
       
  3099 	}
       
  3100 
       
  3101 EXPORT_C TInt RMMFResourceNotificationCustomCommands::WillResumePlay()
       
  3102 	{	
       
  3103 	return iController.CustomCommandSync(iDestinationPckg, 
       
  3104 										EMMFAudioResourceWillResumePlay, 
       
  3105 										KNullDesC8,
       
  3106 										KNullDesC8);	 
       
  3107 	}
       
  3108 
       
  3109 EXPORT_C CMMFResourceNotificationCustomCommandParser* CMMFResourceNotificationCustomCommandParser::NewL(MMMFResourceNotificationCustomCommandImplementor& aImplementor)
       
  3110 	{
       
  3111 	return new(ELeave) CMMFResourceNotificationCustomCommandParser(aImplementor);
       
  3112 	}
       
  3113 
       
  3114 EXPORT_C CMMFResourceNotificationCustomCommandParser::~CMMFResourceNotificationCustomCommandParser()
       
  3115 	{
       
  3116 	}
       
  3117 
       
  3118 CMMFResourceNotificationCustomCommandParser::CMMFResourceNotificationCustomCommandParser( MMMFResourceNotificationCustomCommandImplementor& aImplementor) :
       
  3119 	CMMFCustomCommandParserBase(KMMFEventCategoryAudioResourceAvailable),
       
  3120 	iImplementor(aImplementor)
       
  3121 	{
       
  3122 	}
       
  3123 
       
  3124 void CMMFResourceNotificationCustomCommandParser::HandleRequest(TMMFMessage& aMessage)
       
  3125 	{
       
  3126 	if (aMessage.Destination().InterfaceId() == KMMFEventCategoryAudioResourceAvailable)
       
  3127 		{
       
  3128 		TRAPD(error, DoHandleRequestL(aMessage));
       
  3129 		if (error)
       
  3130 			{
       
  3131 			aMessage.Complete(error);	
       
  3132 			}
       
  3133 		}
       
  3134 	else
       
  3135 		{
       
  3136 		aMessage.Complete(KErrNotSupported);
       
  3137 		}
       
  3138 	}
       
  3139 
       
  3140 void CMMFResourceNotificationCustomCommandParser::DoHandleRequestL(TMMFMessage& aMessage)
       
  3141 	{
       
  3142 	TBool complete = ETrue;
       
  3143 	switch (aMessage.Function())
       
  3144 		{
       
  3145 	case EMMFAudioResourceRegisterNotification:
       
  3146 		complete = DoRegisterAsClientL(aMessage);
       
  3147 		break;
       
  3148 	case EMMFAudioResourceCancelRegisterNotification:
       
  3149 		complete = DoCancelRegisterAsClientL(aMessage);
       
  3150 		break;
       
  3151 	case EMMFAudioResourceGetNotificationData:
       
  3152 		complete = DoGetResourceNotificationDataL(aMessage);
       
  3153 		break;
       
  3154 	case EMMFAudioResourceWillResumePlay:
       
  3155 		complete = DoWillResumePlayL(aMessage);
       
  3156 		break;
       
  3157 	default:
       
  3158 		User::Leave(KErrNotSupported);
       
  3159 		break;
       
  3160 		}
       
  3161 	if (complete)
       
  3162 		{
       
  3163 		aMessage.Complete(KErrNone);	
       
  3164 		}
       
  3165 	}
       
  3166 
       
  3167 EXPORT_C TBool CMMFResourceNotificationCustomCommandParser::DoRegisterAsClientL(TMMFMessage& aMessage)
       
  3168 	{
       
  3169 	TPckgBuf<TMMFAudioConfig> pckg;
       
  3170 	aMessage.ReadData1FromClientL(pckg);
       
  3171 	iImplementor.MarnRegisterAsClientL(pckg().iEventType, pckg().iNotificationRegistrationData);
       
  3172 	return ETrue;
       
  3173 	}
       
  3174 	
       
  3175 EXPORT_C TBool CMMFResourceNotificationCustomCommandParser::DoCancelRegisterAsClientL(TMMFMessage& aMessage)
       
  3176 	{
       
  3177 	TPckgBuf<TMMFAudioConfig> pckg;
       
  3178 	aMessage.ReadData1FromClientL(pckg);
       
  3179 	iImplementor.MarnCancelRegisterAsClientL(pckg().iEventType);
       
  3180 	return ETrue;
       
  3181 	}
       
  3182 	
       
  3183 EXPORT_C TBool CMMFResourceNotificationCustomCommandParser::DoGetResourceNotificationDataL(TMMFMessage& aMessage)
       
  3184 	{
       
  3185 	TPckgBuf<TMMFAudioConfig> pckg;
       
  3186 	aMessage.ReadData1FromClientL(pckg);
       
  3187 	iImplementor.MarnGetResourceNotificationDataL(pckg().iEventType, pckg().iNotificationData);
       
  3188 	TPtrC8 tmp(pckg().iNotificationData);
       
  3189 	aMessage.WriteDataToClientL(pckg().iNotificationData);
       
  3190 	return ETrue;
       
  3191 	}
       
  3192 
       
  3193 EXPORT_C TBool CMMFResourceNotificationCustomCommandParser::DoWillResumePlayL(TMMFMessage& aMessage)
       
  3194 	{
       
  3195 	iImplementor.MarnWillResumePlayL();
       
  3196 	aMessage.Complete(KErrNone);
       
  3197 	return EFalse;
       
  3198 	}
       
  3199 
       
  3200 EXPORT_C RMMFVideoSetInitScreenCustomCommands::RMMFVideoSetInitScreenCustomCommands(RMMFController& aController) :
       
  3201 	RMMFCustomCommandsBase(aController, KUidInterfaceMMFVideoSetInitScreen)
       
  3202 	{
       
  3203 	}
       
  3204 
       
  3205 EXPORT_C TInt RMMFVideoSetInitScreenCustomCommands::SetInitScreenNumber(TInt aScreenNumber)
       
  3206 	{
       
  3207 	TPckgBuf<TInt> configPackage;
       
  3208 	configPackage() = aScreenNumber;
       
  3209 	return iController.CustomCommandSync(iDestinationPckg, 
       
  3210 										 EMMFVideoSetInitScreenNumber,
       
  3211 										 configPackage,
       
  3212 										 KNullDesC8);
       
  3213 	}
       
  3214 		
       
  3215 EXPORT_C CMMFVideoSetInitScreenCustomCommandParser* CMMFVideoSetInitScreenCustomCommandParser::NewL(MMMFVideoSetInitScreenCustomCommandImplementor& aImplementor)
       
  3216 	{
       
  3217 	return new(ELeave) CMMFVideoSetInitScreenCustomCommandParser(aImplementor);
       
  3218 	}
       
  3219 
       
  3220 EXPORT_C CMMFVideoSetInitScreenCustomCommandParser::~CMMFVideoSetInitScreenCustomCommandParser()
       
  3221 	{
       
  3222 	}
       
  3223 
       
  3224 CMMFVideoSetInitScreenCustomCommandParser::CMMFVideoSetInitScreenCustomCommandParser(MMMFVideoSetInitScreenCustomCommandImplementor& aImplementor) :
       
  3225 	CMMFCustomCommandParserBase(KUidInterfaceMMFVideoSetInitScreen),
       
  3226 	iImplementor(aImplementor)
       
  3227 	{
       
  3228 	}
       
  3229 
       
  3230 void CMMFVideoSetInitScreenCustomCommandParser::HandleRequest(TMMFMessage& aMessage)
       
  3231 	{
       
  3232 	if (aMessage.Destination().InterfaceId() == KUidInterfaceMMFVideoSetInitScreen)
       
  3233 		{
       
  3234 		TRAPD(error, DoHandleRequestL(aMessage));
       
  3235 		if (error)
       
  3236 			{
       
  3237 			aMessage.Complete(error);	
       
  3238 			}
       
  3239 		}
       
  3240 	else
       
  3241 		{
       
  3242 		aMessage.Complete(KErrNotSupported);
       
  3243 		}
       
  3244 	}
       
  3245 	
       
  3246 void CMMFVideoSetInitScreenCustomCommandParser::DoHandleRequestL(TMMFMessage& aMessage)
       
  3247 	{
       
  3248 	TBool complete = ETrue;
       
  3249 	switch (aMessage.Function())
       
  3250 		{
       
  3251 	case EMMFVideoSetInitScreenNumber:
       
  3252 		complete = DoSetInitScreenNumberL(aMessage);
       
  3253 		break;
       
  3254 	default:
       
  3255 		User::Leave(KErrNotSupported);
       
  3256 		break;
       
  3257 		}
       
  3258 	if (complete)
       
  3259 		{
       
  3260 		aMessage.Complete(KErrNone);	
       
  3261 		}
       
  3262 	}
       
  3263 
       
  3264 TBool CMMFVideoSetInitScreenCustomCommandParser::DoSetInitScreenNumberL(TMMFMessage& aMessage)
       
  3265 	{
       
  3266 	TPckgBuf<TInt> pckg;
       
  3267 	aMessage.ReadData1FromClientL(pckg);
       
  3268 	iImplementor.MvsdSetInitScreenNumber(pckg());
       
  3269 	return ETrue;
       
  3270 	}
       
  3271 
       
  3272 _LIT(KMMFStandardCustomCommandsPanicCategory, "MMFStandardCustomCommands");
       
  3273 GLDEF_C void Panic(TMmfSCCPanic aError)
       
  3274 	{
       
  3275 	User::Panic(KMMFStandardCustomCommandsPanicCategory, aError);
       
  3276 	}
       
  3277 
       
  3278 
       
  3279 EXPORT_C RMMFVideoPixelAspectRatioCustomCommands::RMMFVideoPixelAspectRatioCustomCommands(RMMFController& aController) :
       
  3280 	RMMFCustomCommandsBase(aController, KUidInterfaceMMFVideoPixelAspectRatio)
       
  3281 	{
       
  3282 	}
       
  3283 
       
  3284 EXPORT_C TInt RMMFVideoPixelAspectRatioCustomCommands::SetPixelAspectRatio(const TVideoAspectRatio& aAspectRatio)
       
  3285 	{
       
  3286 	TPckgBuf<TVideoAspectRatio> configPackage;
       
  3287 	configPackage() = aAspectRatio;
       
  3288 	return iController.CustomCommandSync(iDestinationPckg, 
       
  3289 										 EMMFVideoSetPixelAspectRatio,
       
  3290 										 configPackage,
       
  3291 										 KNullDesC8);
       
  3292 	}
       
  3293 
       
  3294 EXPORT_C TInt RMMFVideoPixelAspectRatioCustomCommands::GetPixelAspectRatio(TVideoAspectRatio& aAspectRatio) const
       
  3295 	{
       
  3296 	TPckgBuf<TVideoAspectRatio> configPackage;
       
  3297  	
       
  3298 	TInt err = iController.CustomCommandSync(iDestinationPckg, 
       
  3299 										 EMMFVideoGetPixelAspectRatio, 
       
  3300 										 KNullDesC8,
       
  3301 										 KNullDesC8,
       
  3302 										 configPackage);
       
  3303 
       
  3304 	if (!err)
       
  3305 		{
       
  3306 		aAspectRatio = configPackage();
       
  3307 		}		
       
  3308 	return err;
       
  3309 	}
       
  3310 
       
  3311 EXPORT_C void RMMFVideoPixelAspectRatioCustomCommands::GetSupportedPixelAspectRatiosL(RArray<TVideoAspectRatio>& aAspectRatios) const
       
  3312 	{
       
  3313 	DoGetVideoPixelAspectRatioArrayL(aAspectRatios, EMMFVideoGetSupportedPixelAspectRatios);
       
  3314 	}
       
  3315 
       
  3316 void RMMFVideoPixelAspectRatioCustomCommands::DoGetVideoPixelAspectRatioArrayL(RArray<TVideoAspectRatio>& aArray, TMMFVideoPixelAspectRatioMessages aIpc) const
       
  3317 	{
       
  3318 	aArray.Reset();
       
  3319 
       
  3320 	TPckgBuf<TInt> numberOfElementsPckg;
       
  3321 	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
       
  3322 													 aIpc, 
       
  3323 													 KNullDesC8,
       
  3324 													 KNullDesC8,
       
  3325 													 numberOfElementsPckg));
       
  3326 
       
  3327 	HBufC8* buf = HBufC8::NewLC(numberOfElementsPckg()*sizeof(TVideoAspectRatio));
       
  3328 	TPtr8 ptr = buf->Des();
       
  3329 
       
  3330 	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg,
       
  3331 													 EMMFVideoPixelAspectRatioCopyArrayData, 
       
  3332 													 KNullDesC8,
       
  3333 													 KNullDesC8,
       
  3334 													 ptr));
       
  3335 	RDesReadStream stream(ptr);
       
  3336 	stream.Open(ptr);
       
  3337 	CleanupClosePushL(stream);
       
  3338 
       
  3339 	for (TInt i=0; i<numberOfElementsPckg(); i++)
       
  3340 		{
       
  3341 		User::LeaveIfError(aArray.Append(TVideoAspectRatio(stream.ReadInt32L(), stream.ReadInt32L())));
       
  3342 		}
       
  3343 
       
  3344 	CleanupStack::PopAndDestroy(2, buf);//stream, buf
       
  3345 	}
       
  3346 		
       
  3347 EXPORT_C CMMFVideoPixelAspectRatioCustomCommandParser* CMMFVideoPixelAspectRatioCustomCommandParser::NewL(MMMFVideoPixelAspectRatioCustomCommandImplementor& aImplementor)
       
  3348 	{
       
  3349 	return new(ELeave) CMMFVideoPixelAspectRatioCustomCommandParser(aImplementor);
       
  3350 	}
       
  3351 
       
  3352 EXPORT_C CMMFVideoPixelAspectRatioCustomCommandParser::~CMMFVideoPixelAspectRatioCustomCommandParser()
       
  3353 	{
       
  3354 	if(iDataCopyBuffer)
       
  3355 		{
       
  3356 		delete iDataCopyBuffer;
       
  3357 		}	
       
  3358 	}
       
  3359 
       
  3360 CMMFVideoPixelAspectRatioCustomCommandParser::CMMFVideoPixelAspectRatioCustomCommandParser(MMMFVideoPixelAspectRatioCustomCommandImplementor& aImplementor) :
       
  3361 	CMMFCustomCommandParserBase(KUidInterfaceMMFVideoPixelAspectRatio),
       
  3362 	iImplementor(aImplementor)
       
  3363 	{
       
  3364 	}
       
  3365 
       
  3366 void CMMFVideoPixelAspectRatioCustomCommandParser::HandleRequest(TMMFMessage& aMessage)
       
  3367 	{
       
  3368 	if (aMessage.Destination().InterfaceId() == KUidInterfaceMMFVideoPixelAspectRatio)
       
  3369 		{
       
  3370 		TRAPD(error, DoHandleRequestL(aMessage));
       
  3371 		if (error)
       
  3372 			{
       
  3373 			aMessage.Complete(error);	
       
  3374 			}
       
  3375 		}
       
  3376 	else
       
  3377 		{
       
  3378 		aMessage.Complete(KErrNotSupported);
       
  3379 		}
       
  3380 	}
       
  3381 	
       
  3382 void CMMFVideoPixelAspectRatioCustomCommandParser::DoHandleRequestL(TMMFMessage& aMessage)
       
  3383 	{
       
  3384 	TBool complete = ETrue;
       
  3385 	switch (aMessage.Function())
       
  3386 		{
       
  3387 	case EMMFVideoSetPixelAspectRatio:
       
  3388 		complete = DoSetPixelAspectRatioL(aMessage);
       
  3389 		break;
       
  3390 	case EMMFVideoGetPixelAspectRatio:
       
  3391 		complete = DoGetPixelAspectRatioL(aMessage);
       
  3392 		break;
       
  3393 	case EMMFVideoGetSupportedPixelAspectRatios:
       
  3394 		complete = DoGetSupportedPixelAspectRatiosL(aMessage);
       
  3395 		break;
       
  3396 	case EMMFVideoPixelAspectRatioCopyArrayData:
       
  3397 		complete = DoCopyArrayDataL(aMessage);
       
  3398 		break;
       
  3399 	default:
       
  3400 		User::Leave(KErrNotSupported);
       
  3401 		break;
       
  3402 		}
       
  3403 	if (complete)
       
  3404 		{
       
  3405 		aMessage.Complete(KErrNone);	
       
  3406 		}
       
  3407 	}
       
  3408 
       
  3409 TBool CMMFVideoPixelAspectRatioCustomCommandParser::DoSetPixelAspectRatioL(TMMFMessage& aMessage)
       
  3410 	{
       
  3411 	TPckgBuf<TVideoAspectRatio> pckg;
       
  3412 	aMessage.ReadData1FromClientL(pckg);
       
  3413 	iImplementor.MvparSetPixelAspectRatioL(pckg());
       
  3414 	return ETrue;
       
  3415 	}
       
  3416 
       
  3417 TBool CMMFVideoPixelAspectRatioCustomCommandParser::DoGetPixelAspectRatioL(TMMFMessage& aMessage)
       
  3418 	{
       
  3419 	TVideoAspectRatio aspectRatio;
       
  3420 	iImplementor.MvparGetPixelAspectRatioL(aspectRatio);
       
  3421 	TPckgBuf<TVideoAspectRatio> pckg;
       
  3422 	pckg() = aspectRatio;
       
  3423 	aMessage.WriteDataToClientL(pckg);
       
  3424 	return ETrue;
       
  3425 	}
       
  3426 
       
  3427 TBool CMMFVideoPixelAspectRatioCustomCommandParser::DoGetSupportedPixelAspectRatiosL(TMMFMessage& aMessage)
       
  3428 	{
       
  3429 	RArray<TVideoAspectRatio> array;
       
  3430 	CleanupClosePushL(array);
       
  3431 	iImplementor.MvparGetSupportedPixelAspectRatiosL(array);
       
  3432 
       
  3433 	DoCreateBufFromVideoAspectRatioArrayL(array);
       
  3434 
       
  3435 	TPckgBuf<TInt> pckg;
       
  3436 	pckg() = array.Count();
       
  3437 	aMessage.WriteDataToClientL(pckg);
       
  3438 
       
  3439 	CleanupStack::PopAndDestroy(&array);
       
  3440 	return ETrue;
       
  3441 	}
       
  3442 
       
  3443 void CMMFVideoPixelAspectRatioCustomCommandParser::DoCreateBufFromVideoAspectRatioArrayL(RArray<TVideoAspectRatio>& aArray)
       
  3444 	{
       
  3445 	delete iDataCopyBuffer;
       
  3446 	iDataCopyBuffer = NULL;
       
  3447 
       
  3448 	iDataCopyBuffer = CBufFlat::NewL(KBufExpandSize8);
       
  3449 	RBufWriteStream stream;
       
  3450 	stream.Open(*iDataCopyBuffer);
       
  3451 	CleanupClosePushL(stream);
       
  3452 	for (TInt i=0;i<aArray.Count();i++)
       
  3453 		{
       
  3454 		stream.WriteInt32L(aArray[i].iNumerator);
       
  3455 		stream.WriteInt32L(aArray[i].iDenominator);
       
  3456 		}
       
  3457 	CleanupStack::PopAndDestroy(&stream);
       
  3458 	}
       
  3459 
       
  3460 TBool CMMFVideoPixelAspectRatioCustomCommandParser::DoCopyArrayDataL(TMMFMessage& aMessage)
       
  3461 	{
       
  3462 	if (!iDataCopyBuffer)
       
  3463 		{
       
  3464 		User::Leave(KErrNotReady);
       
  3465 		}		
       
  3466 	aMessage.WriteDataToClientL(iDataCopyBuffer->Ptr(0));
       
  3467 	return ETrue;
       
  3468 	}
       
  3469 
       
  3470 EXPORT_C RMMFVideoAudioSamplingRateAndChannelConfigCustomCommands::RMMFVideoAudioSamplingRateAndChannelConfigCustomCommands(RMMFController& aController) :
       
  3471 	RMMFCustomCommandsBase(aController, KUidInterfaceMMFVideoAudioSamplingRateAndChannelConfig)
       
  3472 	{
       
  3473 	}
       
  3474 
       
  3475 EXPORT_C TInt RMMFVideoAudioSamplingRateAndChannelConfigCustomCommands::SetAudioChannels(const TUint aNumChannels)
       
  3476 	{
       
  3477 	TPckgBuf<TUint> configPackage;
       
  3478 	configPackage() = aNumChannels;
       
  3479 	return iController.CustomCommandSync(iDestinationPckg, 
       
  3480 										 EMMFVideoSetAudioChannels,
       
  3481 										 configPackage,
       
  3482 										 KNullDesC8);
       
  3483 	}
       
  3484 
       
  3485 EXPORT_C TInt RMMFVideoAudioSamplingRateAndChannelConfigCustomCommands::GetAudioChannels(TUint& aAudioChannels) const
       
  3486 	{
       
  3487 	TPckgBuf<TUint> configPackage;
       
  3488  	
       
  3489 	TInt err = iController.CustomCommandSync(iDestinationPckg, 
       
  3490 										 EMMFVideoGetAudioChannels, 
       
  3491 										 KNullDesC8,
       
  3492 										 KNullDesC8,
       
  3493 										 configPackage);
       
  3494 
       
  3495 	if (!err)
       
  3496 		{
       
  3497 		aAudioChannels = configPackage();
       
  3498 		}		
       
  3499 	return err;
       
  3500 	}
       
  3501 
       
  3502 EXPORT_C void RMMFVideoAudioSamplingRateAndChannelConfigCustomCommands::GetSupportedAudioChannelsL(RArray<TUint>& aChannels) const
       
  3503 	{
       
  3504 	DoGetUintArrayL(aChannels, EMMFVideoGetSupportedAudioChannels);
       
  3505 	}
       
  3506 
       
  3507 EXPORT_C TInt RMMFVideoAudioSamplingRateAndChannelConfigCustomCommands::SetAudioSampleRate(const TUint aSampleRate)
       
  3508 	{
       
  3509 	TPckgBuf<TUint> configPackage;
       
  3510 	configPackage() = aSampleRate;
       
  3511 	return iController.CustomCommandSync(iDestinationPckg, 
       
  3512 										 EMMFVideoSetAudioSampleRate,
       
  3513 										 configPackage,
       
  3514 										 KNullDesC8);
       
  3515 	}
       
  3516 
       
  3517 EXPORT_C TInt RMMFVideoAudioSamplingRateAndChannelConfigCustomCommands::GetAudioSampleRate(TUint& aSampleRate) const
       
  3518 	{
       
  3519 	TPckgBuf<TUint> configPackage;
       
  3520  	
       
  3521 	TInt err = iController.CustomCommandSync(iDestinationPckg, 
       
  3522 										 EMMFVideoGetAudioSampleRate, 
       
  3523 										 KNullDesC8,
       
  3524 										 KNullDesC8,
       
  3525 										 configPackage);
       
  3526 
       
  3527 	if (!err)
       
  3528 		{
       
  3529 		aSampleRate = configPackage();
       
  3530 		}		
       
  3531 	return err;
       
  3532 	}
       
  3533 
       
  3534 EXPORT_C void RMMFVideoAudioSamplingRateAndChannelConfigCustomCommands::GetSupportedAudioSampleRatesL(RArray<TUint>& aSampleRates) const
       
  3535 	{
       
  3536 	DoGetUintArrayL(aSampleRates, EMMFVideoGetSupportedAudioSampleRates);
       
  3537 	}
       
  3538 
       
  3539 void RMMFVideoAudioSamplingRateAndChannelConfigCustomCommands::DoGetUintArrayL(RArray<TUint>& aArray, TMMFVideoAudioSamplingRateAndChannelConfigMessages aIpc) const
       
  3540 	{
       
  3541 	aArray.Reset();
       
  3542 
       
  3543 	TPckgBuf<TInt> numberOfElementsPckg;
       
  3544 	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
       
  3545 													 aIpc, 
       
  3546 													 KNullDesC8,
       
  3547 													 KNullDesC8,
       
  3548 													 numberOfElementsPckg));
       
  3549 
       
  3550 	HBufC8* buf = HBufC8::NewLC(numberOfElementsPckg()*sizeof(TUint));
       
  3551 	TPtr8 ptr = buf->Des();
       
  3552 
       
  3553 	User::LeaveIfError(iController.CustomCommandSync(iDestinationPckg, 
       
  3554 													 EMMFVideoAudioSamplingRateAndChannelConfigCopyArrayData, 
       
  3555 													 KNullDesC8,
       
  3556 													 KNullDesC8,
       
  3557 													 ptr));
       
  3558 	RDesReadStream stream(ptr);
       
  3559 	stream.Open(ptr);
       
  3560 	CleanupClosePushL(stream);
       
  3561 
       
  3562 	for (TInt i=0; i<numberOfElementsPckg(); i++)
       
  3563 		{
       
  3564 		User::LeaveIfError(aArray.Append(stream.ReadUint32L()));
       
  3565 		}
       
  3566 
       
  3567 	CleanupStack::PopAndDestroy(2, buf);//stream, buf
       
  3568 	}
       
  3569 
       
  3570 		
       
  3571 EXPORT_C CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser* CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser::NewL(MMMFVideoAudioSamplingRateAndChannelConfigCustomCommandImplementor& aImplementor)
       
  3572 	{
       
  3573 	return new(ELeave) CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser(aImplementor);
       
  3574 	}
       
  3575 
       
  3576 EXPORT_C CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser::~CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser()
       
  3577 	{
       
  3578 	if(iDataCopyBuffer)
       
  3579 		{
       
  3580 		delete iDataCopyBuffer;
       
  3581 		}	
       
  3582 	}
       
  3583 
       
  3584 CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser::CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser(MMMFVideoAudioSamplingRateAndChannelConfigCustomCommandImplementor& aImplementor) :
       
  3585 	CMMFCustomCommandParserBase(KUidInterfaceMMFVideoAudioSamplingRateAndChannelConfig),
       
  3586 	iImplementor(aImplementor)
       
  3587 	{
       
  3588 	}
       
  3589 
       
  3590 void CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser::HandleRequest(TMMFMessage& aMessage)
       
  3591 	{
       
  3592 	if (aMessage.Destination().InterfaceId() == KUidInterfaceMMFVideoAudioSamplingRateAndChannelConfig)
       
  3593 		{
       
  3594 		TRAPD(error, DoHandleRequestL(aMessage));
       
  3595 		if (error)
       
  3596 			{
       
  3597 			aMessage.Complete(error);	
       
  3598 			}
       
  3599 		}
       
  3600 	else
       
  3601 		{
       
  3602 		aMessage.Complete(KErrNotSupported);
       
  3603 		}
       
  3604 	}
       
  3605 	
       
  3606 void CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser::DoHandleRequestL(TMMFMessage& aMessage)
       
  3607 	{
       
  3608 	TBool complete = ETrue;
       
  3609 	switch (aMessage.Function())
       
  3610 		{
       
  3611 	case EMMFVideoSetAudioChannels:
       
  3612 		complete = DoSetAudioChannelsL(aMessage);
       
  3613 		break;
       
  3614 	case EMMFVideoGetAudioChannels:
       
  3615 		complete = DoGetAudioChannelsL(aMessage);
       
  3616 		break;
       
  3617 	case EMMFVideoGetSupportedAudioChannels:
       
  3618 		complete = DoGetSupportedAudioChannelsL(aMessage);
       
  3619 		break;
       
  3620 	case EMMFVideoSetAudioSampleRate:
       
  3621 		complete = DoSetAudioSampleRateL(aMessage);
       
  3622 		break;
       
  3623 	case EMMFVideoGetAudioSampleRate:
       
  3624 		complete = DoGetAudioSampleRateL(aMessage);
       
  3625 		break;
       
  3626 	case EMMFVideoGetSupportedAudioSampleRates:
       
  3627 		complete = DoGetSupportedAudioSampleRatesL(aMessage);
       
  3628 		break;
       
  3629 	case EMMFVideoAudioSamplingRateAndChannelConfigCopyArrayData:
       
  3630 		complete = DoCopyArrayDataL(aMessage);
       
  3631 		break;
       
  3632 	default:
       
  3633 		User::Leave(KErrNotSupported);
       
  3634 		break;
       
  3635 		}
       
  3636 	if (complete)
       
  3637 		{
       
  3638 		aMessage.Complete(KErrNone);	
       
  3639 		}
       
  3640 	}
       
  3641 
       
  3642 
       
  3643 TBool CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser::DoSetAudioChannelsL(TMMFMessage& aMessage)
       
  3644 	{
       
  3645 	TPckgBuf<TUint> pckg;
       
  3646 	aMessage.ReadData1FromClientL(pckg);
       
  3647 	iImplementor.MvasrccSetAudioChannelsL(pckg());
       
  3648 	return ETrue;
       
  3649 	}
       
  3650 	
       
  3651 TBool CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser::DoGetAudioChannelsL(TMMFMessage& aMessage)
       
  3652 	{
       
  3653 	TUint channels = 0;
       
  3654 	iImplementor.MvasrccGetAudioChannelsL(channels);
       
  3655 	TPckgBuf<TUint> pckg;
       
  3656 	pckg() = channels;
       
  3657 	aMessage.WriteDataToClientL(pckg);
       
  3658 	return ETrue;
       
  3659 	}
       
  3660 	
       
  3661 TBool CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser::DoGetSupportedAudioChannelsL(TMMFMessage& aMessage)
       
  3662 	{
       
  3663 	RArray<TUint> audioChannels;
       
  3664 	CleanupClosePushL(audioChannels);
       
  3665 	iImplementor.MvasrccGetSupportedAudioChannelsL(audioChannels);
       
  3666 
       
  3667 	DoCreateBufFromUintArrayL(audioChannels);
       
  3668 
       
  3669 	TPckgBuf<TInt> pckg;
       
  3670 	pckg() = audioChannels.Count();
       
  3671 	aMessage.WriteDataToClientL(pckg);
       
  3672 
       
  3673 	CleanupStack::PopAndDestroy(&audioChannels);
       
  3674 	return ETrue;
       
  3675 	}
       
  3676 
       
  3677 TBool CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser::DoSetAudioSampleRateL(TMMFMessage& aMessage)
       
  3678 	{
       
  3679 	TPckgBuf<TUint> pckg;
       
  3680 	aMessage.ReadData1FromClientL(pckg);
       
  3681 	iImplementor.MvasrccSetAudioSampleRateL(pckg());
       
  3682 	return ETrue;
       
  3683 	}
       
  3684 
       
  3685 TBool CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser::DoGetAudioSampleRateL(TMMFMessage& aMessage)
       
  3686 	{
       
  3687 	TUint sampleRate = 0;
       
  3688 	iImplementor.MvasrccGetAudioSampleRateL(sampleRate);
       
  3689 	TPckgBuf<TUint> pckg;
       
  3690 	pckg() = sampleRate;
       
  3691 	aMessage.WriteDataToClientL(pckg);
       
  3692 	return ETrue;
       
  3693 	}
       
  3694 
       
  3695 TBool CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser::DoGetSupportedAudioSampleRatesL(TMMFMessage& aMessage)
       
  3696 	{
       
  3697 	RArray<TUint> sampleRates;
       
  3698 	CleanupClosePushL(sampleRates);
       
  3699 	iImplementor.MvasrccGetSupportedAudioSampleRatesL(sampleRates);
       
  3700 
       
  3701 	DoCreateBufFromUintArrayL(sampleRates);
       
  3702 
       
  3703 	TPckgBuf<TInt> pckg;
       
  3704 	pckg() = sampleRates.Count();
       
  3705 	aMessage.WriteDataToClientL(pckg);
       
  3706 
       
  3707 	CleanupStack::PopAndDestroy(&sampleRates);
       
  3708 	return ETrue;
       
  3709 	}
       
  3710 
       
  3711 void CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser::DoCreateBufFromUintArrayL(RArray<TUint>& aArray)
       
  3712 	{
       
  3713 	delete iDataCopyBuffer;
       
  3714 	iDataCopyBuffer = NULL;
       
  3715 
       
  3716 	iDataCopyBuffer = CBufFlat::NewL(KBufExpandSize8);
       
  3717 	RBufWriteStream stream;
       
  3718 	stream.Open(*iDataCopyBuffer);
       
  3719 	CleanupClosePushL(stream);
       
  3720 	for (TInt i=0;i<aArray.Count();i++)
       
  3721 		{
       
  3722 		stream.WriteUint32L(aArray[i]);
       
  3723 		}		
       
  3724 	CleanupStack::PopAndDestroy(&stream);
       
  3725 	}
       
  3726 
       
  3727 TBool CMMFVideoAudioSamplingRateAndChannelConfigCustomCommandParser::DoCopyArrayDataL(TMMFMessage& aMessage)
       
  3728 	{
       
  3729 	if (!iDataCopyBuffer)
       
  3730 		{
       
  3731 		User::Leave(KErrNotReady);
       
  3732 		}		
       
  3733 	aMessage.WriteDataToClientL(iDataCopyBuffer->Ptr(0));
       
  3734 	return ETrue;
       
  3735 	}
       
  3736 
       
  3737 
       
  3738 EXPORT_C CMMFVideoPlayControllerExtCustomCommandParser* CMMFVideoPlayControllerExtCustomCommandParser::NewL(MMMFVideoPlayControllerExtCustomCommandImplementor& aImplementor)
       
  3739 	{
       
  3740 	return new(ELeave) CMMFVideoPlayControllerExtCustomCommandParser(aImplementor);
       
  3741 	}
       
  3742 
       
  3743 EXPORT_C CMMFVideoPlayControllerExtCustomCommandParser::~CMMFVideoPlayControllerExtCustomCommandParser()
       
  3744 	{
       
  3745 	}
       
  3746 
       
  3747 CMMFVideoPlayControllerExtCustomCommandParser::CMMFVideoPlayControllerExtCustomCommandParser(MMMFVideoPlayControllerExtCustomCommandImplementor& aImplementor) :
       
  3748 	CMMFCustomCommandParserBase(KUidInterfaceMMFVideoPlayExt),
       
  3749 	iImplementor(aImplementor)	
       
  3750 	{
       
  3751 	}
       
  3752 
       
  3753 void CMMFVideoPlayControllerExtCustomCommandParser::HandleRequest(TMMFMessage& aMessage)
       
  3754 	{
       
  3755 	if (aMessage.Destination().InterfaceId() == KUidInterfaceMMFVideoPlayExt)
       
  3756 		{
       
  3757 		TRAPD(error, DoHandleRequestL(aMessage));
       
  3758 		if (error)
       
  3759 			{
       
  3760 			aMessage.Complete(error);	
       
  3761 			}
       
  3762 		}
       
  3763 	else
       
  3764 		{
       
  3765 		aMessage.Complete(KErrNotSupported);
       
  3766 		}
       
  3767 	}
       
  3768 
       
  3769 void CMMFVideoPlayControllerExtCustomCommandParser::DoHandleRequestL(TMMFMessage& aMessage)
       
  3770 	{
       
  3771 	TBool complete = ETrue;
       
  3772 
       
  3773 	switch (aMessage.Function())
       
  3774 		{
       
  3775 		case EMMFVideoPlayControllerSetPlayVelocity:
       
  3776 			complete = DoSetPlayVelocityL(aMessage);
       
  3777 			break;
       
  3778 		case EMMFVideoPlayControllerPlayVelocity:
       
  3779 			complete = DoPlayVelocityL(aMessage);
       
  3780 			break;
       
  3781 		case EMMFVideoPlayControllerStepFrame:
       
  3782 			complete = DoStepFrameL(aMessage);
       
  3783 			break;
       
  3784 		case EMMFVideoPlayControllerGetPlayRateCapabilities:
       
  3785 			complete = DoGetPlayRateCapabilitiesL(aMessage);
       
  3786 			break;
       
  3787 		case EMMFVideoPlayControllerSetVideoEnabled:
       
  3788 			complete = DoSetVideoEnabledL(aMessage);
       
  3789 			break;
       
  3790 		case EMMFVideoPlayControllerVideoEnabled:
       
  3791 			complete = DoVideoEnabledL(aMessage);
       
  3792 			break;
       
  3793 		case EMMFVideoPlayControllerSetAudioEnabled:
       
  3794 			complete = DoSetAudioEnabledL(aMessage);
       
  3795 			break;
       
  3796 		case EMMFVideoPlayControllerSetAutoScale:
       
  3797 			complete = DoSetAutoScaleL(aMessage);
       
  3798 			break;
       
  3799 		default:
       
  3800 			User::Leave(KErrNotSupported);
       
  3801 			break;
       
  3802 		}
       
  3803 	
       
  3804 	if (complete)
       
  3805 		{
       
  3806 		aMessage.Complete(KErrNone);
       
  3807 		}
       
  3808 	}
       
  3809 
       
  3810 TBool CMMFVideoPlayControllerExtCustomCommandParser::DoSetPlayVelocityL(TMMFMessage& aMessage)
       
  3811 	{
       
  3812 	TPckgBuf<TInt> pckg;
       
  3813 	aMessage.ReadData1FromClientL(pckg);
       
  3814 	iImplementor.MvpecSetPlayVelocityL(pckg());
       
  3815 	
       
  3816 	return ETrue;
       
  3817 	}
       
  3818 
       
  3819 TBool CMMFVideoPlayControllerExtCustomCommandParser::DoPlayVelocityL(TMMFMessage& aMessage)
       
  3820 	{
       
  3821 	TPckgBuf<TInt> pckg;
       
  3822 	
       
  3823 	pckg() = iImplementor.MvpecPlayVelocityL();
       
  3824 
       
  3825 	aMessage.WriteDataToClientL(pckg);
       
  3826 	
       
  3827 	return ETrue;
       
  3828 	}
       
  3829 
       
  3830 TBool CMMFVideoPlayControllerExtCustomCommandParser::DoStepFrameL(TMMFMessage& aMessage)
       
  3831 	{
       
  3832 	TPckgBuf<TInt> pckg;
       
  3833 	aMessage.ReadData1FromClientL(pckg);
       
  3834 	iImplementor.MvpecStepFrameL(pckg());
       
  3835 
       
  3836 	return ETrue;
       
  3837 	}
       
  3838 
       
  3839 TBool CMMFVideoPlayControllerExtCustomCommandParser::DoGetPlayRateCapabilitiesL(TMMFMessage& aMessage)
       
  3840 	{
       
  3841 	TPckgBuf<TVideoPlayRateCapabilities> pckg;
       
  3842 	
       
  3843 	iImplementor.MvpecGetPlayRateCapabilitiesL(pckg());
       
  3844 
       
  3845 	aMessage.WriteDataToClientL(pckg);
       
  3846 	
       
  3847 	return ETrue;
       
  3848 	}
       
  3849 
       
  3850 TBool CMMFVideoPlayControllerExtCustomCommandParser::DoSetVideoEnabledL(TMMFMessage& aMessage)
       
  3851 	{
       
  3852 	TPckgBuf<TBool> pckg;
       
  3853 	aMessage.ReadData1FromClientL(pckg);
       
  3854 	iImplementor.MvpecSetVideoEnabledL(pckg());
       
  3855 	
       
  3856 	return ETrue;	
       
  3857 	}
       
  3858 
       
  3859 TBool CMMFVideoPlayControllerExtCustomCommandParser::DoVideoEnabledL(TMMFMessage& aMessage)
       
  3860 	{
       
  3861 	TPckgBuf<TBool> pckg;	
       
  3862 	
       
  3863 	pckg() = iImplementor.MvpecVideoEnabledL();
       
  3864 
       
  3865 	aMessage.WriteDataToClientL(pckg);
       
  3866 	return ETrue;
       
  3867 	}
       
  3868 
       
  3869 TBool CMMFVideoPlayControllerExtCustomCommandParser::DoSetAudioEnabledL(TMMFMessage& aMessage)
       
  3870 	{
       
  3871 	TPckgBuf<TBool> pckg;
       
  3872 	aMessage.ReadData1FromClientL(pckg);
       
  3873 	iImplementor.MvpecSetAudioEnabledL(pckg());
       
  3874 	
       
  3875 	return ETrue;
       
  3876 	}
       
  3877 
       
  3878 TBool CMMFVideoPlayControllerExtCustomCommandParser::DoSetAutoScaleL(TMMFMessage& aMessage)
       
  3879 	{
       
  3880 	TPckgBuf<TMMFVideoPlayAutoScaleParams> pckg;
       
  3881 	aMessage.ReadData1FromClientL(pckg);
       
  3882 	iImplementor.MvpecSetAutoScaleL(pckg().iScaleType,pckg().iHorizPos , pckg().iVertPos );
       
  3883 	
       
  3884 	return ETrue;
       
  3885 	}
       
  3886 
       
  3887 EXPORT_C RMMFVideoPlayControllerExtCustomCommands::RMMFVideoPlayControllerExtCustomCommands(RMMFController& aController) :
       
  3888 RMMFCustomCommandsBase(aController, KUidInterfaceMMFVideoPlayExt)
       
  3889 	{
       
  3890 	}
       
  3891 
       
  3892 EXPORT_C TInt RMMFVideoPlayControllerExtCustomCommands::SetPlayVelocity(TInt aVelocity)
       
  3893 	{
       
  3894 	TPckgBuf<TInt> pckg(aVelocity);	
       
  3895 	return iController.CustomCommandSync(iDestinationPckg, 
       
  3896 												EMMFVideoPlayControllerSetPlayVelocity, 
       
  3897 												pckg,
       
  3898 												KNullDesC8);
       
  3899 	}
       
  3900 
       
  3901 EXPORT_C TInt RMMFVideoPlayControllerExtCustomCommands::PlayVelocity(TInt &aVelocity) const
       
  3902 	{
       
  3903 	TPckgBuf<TInt> pckg;	
       
  3904 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
  3905 												EMMFVideoPlayControllerPlayVelocity, 
       
  3906 												KNullDesC8,
       
  3907 												KNullDesC8,
       
  3908 												pckg);
       
  3909 	if (error == KErrNone)
       
  3910 		{	
       
  3911 		aVelocity = pckg();
       
  3912 		}
       
  3913 	return error;
       
  3914 	}
       
  3915 
       
  3916 EXPORT_C TInt RMMFVideoPlayControllerExtCustomCommands::StepFrame(TInt aStep)
       
  3917 	{
       
  3918 	TPckgBuf<TInt> pckg(aStep);	
       
  3919 	return iController.CustomCommandSync(iDestinationPckg, 
       
  3920 												EMMFVideoPlayControllerStepFrame, 
       
  3921 												pckg,
       
  3922 												KNullDesC8);
       
  3923 	}
       
  3924 
       
  3925 EXPORT_C TInt RMMFVideoPlayControllerExtCustomCommands::GetPlayRateCapabilities(TVideoPlayRateCapabilities& aCapabilities) const
       
  3926 	{
       
  3927 	TPckgBuf<TVideoPlayRateCapabilities> pckg;	
       
  3928 	TInt error = iController.CustomCommandSync(iDestinationPckg, 
       
  3929 												EMMFVideoPlayControllerGetPlayRateCapabilities, 
       
  3930 												KNullDesC8,
       
  3931 												KNullDesC8,
       
  3932 												pckg);
       
  3933 	if (!error)
       
  3934 		{
       
  3935 		aCapabilities = pckg();
       
  3936 		}
       
  3937 	return error;
       
  3938 	}
       
  3939 
       
  3940 EXPORT_C TInt RMMFVideoPlayControllerExtCustomCommands::SetVideoEnabled(TBool aVideoEnabled)
       
  3941 	{
       
  3942 	TPckgBuf<TBool> pckg(aVideoEnabled);	
       
  3943 	return iController.CustomCommandSync(iDestinationPckg, 
       
  3944 												EMMFVideoPlayControllerSetVideoEnabled, 
       
  3945 												pckg,
       
  3946 												KNullDesC8);
       
  3947 	}
       
  3948 
       
  3949 EXPORT_C TInt RMMFVideoPlayControllerExtCustomCommands::VideoEnabled(TBool &aVideoEnabled) const
       
  3950 	{
       
  3951 	TPckgBuf<TBool> pckg;	
       
  3952 	TInt error =  iController.CustomCommandSync(iDestinationPckg, 
       
  3953 												EMMFVideoPlayControllerVideoEnabled, 
       
  3954 												KNullDesC8,
       
  3955 												KNullDesC8,
       
  3956 												pckg);
       
  3957 	if (error == KErrNone)
       
  3958 		{
       
  3959 		aVideoEnabled = pckg();
       
  3960 		}
       
  3961 	return error;
       
  3962 	}
       
  3963 
       
  3964 EXPORT_C TInt RMMFVideoPlayControllerExtCustomCommands::SetAudioEnabled(TBool aAudioEnabled)
       
  3965 	{
       
  3966 	TPckgBuf<TBool> pckg(aAudioEnabled);	
       
  3967 	return iController.CustomCommandSync(iDestinationPckg, 
       
  3968 												EMMFVideoPlayControllerSetAudioEnabled, 
       
  3969 												pckg,
       
  3970 												KNullDesC8);
       
  3971 	}
       
  3972 
       
  3973 EXPORT_C TInt RMMFVideoPlayControllerExtCustomCommands::SetAutoScale(TAutoScaleType aScaleType, TInt aHorizPos, TInt aVertPos)
       
  3974 	{
       
  3975 	TPckgBuf<TMMFVideoPlayAutoScaleParams> pckg;	
       
  3976 
       
  3977 	pckg().iScaleType = aScaleType;
       
  3978 	pckg().iHorizPos = aHorizPos;
       
  3979 	pckg().iVertPos = aVertPos;
       
  3980 	
       
  3981 	return iController.CustomCommandSync(iDestinationPckg, 
       
  3982 												EMMFVideoPlayControllerSetAutoScale, 
       
  3983 												pckg,
       
  3984 												KNullDesC8);
       
  3985 	}
       
  3986 
       
  3987 
       
  3988 EXPORT_C CMMFVideoRecordControllerExtCustomCommandParser* CMMFVideoRecordControllerExtCustomCommandParser::NewL(MMMFVideoRecordControllerExtCustomCommandImplementor& aImplementor)
       
  3989 	{
       
  3990 	return new(ELeave) CMMFVideoRecordControllerExtCustomCommandParser(aImplementor);
       
  3991 	}
       
  3992 
       
  3993 EXPORT_C CMMFVideoRecordControllerExtCustomCommandParser::~CMMFVideoRecordControllerExtCustomCommandParser()
       
  3994 	{
       
  3995 	}
       
  3996 
       
  3997 CMMFVideoRecordControllerExtCustomCommandParser::CMMFVideoRecordControllerExtCustomCommandParser(MMMFVideoRecordControllerExtCustomCommandImplementor& aImplementor) :
       
  3998 	CMMFCustomCommandParserBase(KUidInterfaceMMFVideoRecorderExt),
       
  3999 	iImplementor(aImplementor)	
       
  4000 	{
       
  4001 	}
       
  4002 
       
  4003 void CMMFVideoRecordControllerExtCustomCommandParser::HandleRequest(TMMFMessage& aMessage)
       
  4004 	{
       
  4005 	if (aMessage.Destination().InterfaceId() == KUidInterfaceMMFVideoRecorderExt)
       
  4006 		{
       
  4007 		TRAPD(error, DoHandleRequestL(aMessage));
       
  4008 		if (error)
       
  4009 			{
       
  4010 			aMessage.Complete(error);	
       
  4011 			}
       
  4012 		}
       
  4013 	else
       
  4014 		{
       
  4015 		aMessage.Complete(KErrNotSupported);
       
  4016 		}
       
  4017 	}
       
  4018 
       
  4019 void CMMFVideoRecordControllerExtCustomCommandParser::DoHandleRequestL(TMMFMessage& aMessage)
       
  4020 	{
       
  4021 	TBool complete = ETrue;
       
  4022 	switch (aMessage.Function())
       
  4023 		{
       
  4024 	case EMMFVideoRecordControllerSetVideoEnabled:
       
  4025 		complete = DoSetVideoEnabledL(aMessage);
       
  4026 		break;
       
  4027 	case EMMFVideoRecordControllerVideoEnabled:
       
  4028 		complete = DoVideoEnabledL(aMessage);
       
  4029 		break;
       
  4030 	case EMMFVideoRecordControllerSetVideoQuality:
       
  4031 		complete = DoSetVideoQualityL(aMessage);
       
  4032 		break;
       
  4033 	case EMMFVideoRecordControllerVideoQuality:
       
  4034 		complete = DoVideoQualityL(aMessage);
       
  4035 		break;
       
  4036 	case EMMFVideoRecordControllerSetVideoFrameRateFixed:
       
  4037 		complete = DoSetVideoFrameRateFixedL(aMessage);
       
  4038 		break;
       
  4039 	case EMMFVideoRecordControllerVideoFrameRateFixed:
       
  4040 		complete = DoVideoFrameRateFixedL(aMessage);
       
  4041 		break;
       
  4042 	default:
       
  4043 		User::Leave(KErrNotSupported);
       
  4044 		break;
       
  4045 		}
       
  4046 	if (complete)
       
  4047 		{
       
  4048 		aMessage.Complete(KErrNone);
       
  4049 		}
       
  4050 	}
       
  4051 
       
  4052 TBool CMMFVideoRecordControllerExtCustomCommandParser::DoSetVideoEnabledL(TMMFMessage& aMessage)
       
  4053 	{
       
  4054 	TPckgBuf<TBool> pckg;
       
  4055 	aMessage.ReadData1FromClientL(pckg);
       
  4056 	iImplementor.MvrecSetVideoEnabledL(pckg());
       
  4057 	
       
  4058 	return ETrue;
       
  4059 	}
       
  4060 	
       
  4061 TBool CMMFVideoRecordControllerExtCustomCommandParser::DoVideoEnabledL(TMMFMessage& aMessage)
       
  4062 	{
       
  4063 	TPckgBuf<TInt> pckg;	
       
  4064 	
       
  4065 	pckg() = iImplementor.MvrecVideoEnabledL();
       
  4066 	
       
  4067 	aMessage.WriteDataToClientL(pckg);
       
  4068 	
       
  4069 	return ETrue;
       
  4070 	}
       
  4071 	
       
  4072 TBool CMMFVideoRecordControllerExtCustomCommandParser::DoSetVideoQualityL(TMMFMessage& aMessage)
       
  4073 	{
       
  4074 	TPckgBuf<TInt> pckg;
       
  4075 	aMessage.ReadData1FromClientL(pckg);
       
  4076 	iImplementor.MvrecSetVideoQualityL(pckg());
       
  4077 	
       
  4078 	return ETrue;
       
  4079 	}
       
  4080 	
       
  4081 TBool CMMFVideoRecordControllerExtCustomCommandParser::DoVideoQualityL(TMMFMessage& aMessage)
       
  4082 	{
       
  4083 	TPckgBuf<TInt> pckg;
       
  4084 	
       
  4085 	pckg() = iImplementor.MvrecVideoQualityL();
       
  4086 	
       
  4087 	aMessage.WriteDataToClientL(pckg);
       
  4088 	
       
  4089 	return ETrue;
       
  4090 	}
       
  4091 	
       
  4092 TBool CMMFVideoRecordControllerExtCustomCommandParser::DoSetVideoFrameRateFixedL(TMMFMessage& aMessage)
       
  4093 	{
       
  4094 	TPckgBuf<TBool> pckg;
       
  4095 	aMessage.ReadData1FromClientL(pckg);
       
  4096 	iImplementor.MvrecSetVideoFrameRateFixedL(pckg());
       
  4097 	
       
  4098 	return ETrue;	
       
  4099 	}
       
  4100 	
       
  4101 TBool CMMFVideoRecordControllerExtCustomCommandParser::DoVideoFrameRateFixedL(TMMFMessage& aMessage)
       
  4102 	{
       
  4103 	TPckgBuf<TBool> pckg;	
       
  4104 	
       
  4105 	pckg() = iImplementor.MvrecVideoFrameRateFixedL();
       
  4106 	
       
  4107 	aMessage.WriteDataToClientL(pckg);
       
  4108 	return ETrue;
       
  4109 	}
       
  4110 
       
  4111 
       
  4112 EXPORT_C RMMFVideoRecordControllerExtCustomCommands::RMMFVideoRecordControllerExtCustomCommands(RMMFController& aController) :
       
  4113 	RMMFCustomCommandsBase(aController, KUidInterfaceMMFVideoRecorderExt)
       
  4114 	{
       
  4115 	}
       
  4116 
       
  4117 EXPORT_C TInt RMMFVideoRecordControllerExtCustomCommands::SetVideoEnabled(TBool aEnabled)
       
  4118 	{
       
  4119 	TPckgBuf<TBool> pckg(aEnabled);	
       
  4120 	return iController.CustomCommandSync(iDestinationPckg, 
       
  4121 												EMMFVideoRecordControllerSetVideoEnabled, 
       
  4122 												pckg,
       
  4123 												KNullDesC8);
       
  4124 	}
       
  4125 
       
  4126 EXPORT_C TInt RMMFVideoRecordControllerExtCustomCommands::VideoEnabled(TBool &aEnabled) const
       
  4127 	{
       
  4128 	TPckgBuf<TBool> pckg(EFalse);	
       
  4129 	TInt error;
       
  4130 
       
  4131 	error = iController.CustomCommandSync(iDestinationPckg, 
       
  4132 												EMMFVideoRecordControllerVideoEnabled, 
       
  4133 												KNullDesC8,
       
  4134 												KNullDesC8,
       
  4135 												pckg);
       
  4136 	if (error == KErrNone)
       
  4137 		{
       
  4138 		aEnabled = pckg();
       
  4139 		}
       
  4140 	return error;
       
  4141 	}
       
  4142 
       
  4143 EXPORT_C TInt RMMFVideoRecordControllerExtCustomCommands::SetVideoQuality(TInt aQuality)
       
  4144 	{
       
  4145 	TPckgBuf<TInt> pckg(aQuality);	
       
  4146 	return iController.CustomCommandSync(iDestinationPckg, 
       
  4147 												EMMFVideoRecordControllerSetVideoQuality, 
       
  4148 												pckg,
       
  4149 												KNullDesC8);
       
  4150 	}
       
  4151 
       
  4152 EXPORT_C TInt RMMFVideoRecordControllerExtCustomCommands::VideoQuality(TInt &aQuality) const
       
  4153 	{
       
  4154 	TPckgBuf<TInt> pckg;	
       
  4155 	TInt error;
       
  4156 
       
  4157 	error = iController.CustomCommandSync(iDestinationPckg, 
       
  4158 												EMMFVideoRecordControllerVideoQuality, 
       
  4159 												KNullDesC8,
       
  4160 												KNullDesC8,
       
  4161 												pckg);
       
  4162 	if (error == KErrNone)
       
  4163 		{
       
  4164 		aQuality = pckg();
       
  4165 		}
       
  4166 	return error;
       
  4167 	}
       
  4168 
       
  4169 EXPORT_C TInt RMMFVideoRecordControllerExtCustomCommands::SetVideoFrameRateFixed(TBool aFixedFrameRate)
       
  4170 	{
       
  4171 	TPckgBuf<TBool> pckg(aFixedFrameRate);	
       
  4172 	return iController.CustomCommandSync(iDestinationPckg, 
       
  4173 												EMMFVideoRecordControllerSetVideoFrameRateFixed, 
       
  4174 												pckg,
       
  4175 												KNullDesC8);
       
  4176 	}
       
  4177 
       
  4178 EXPORT_C TInt RMMFVideoRecordControllerExtCustomCommands::VideoFrameRateFixed(TBool &aFixedFrameRate) const
       
  4179 	{
       
  4180 	TPckgBuf<TBool> pckg;	
       
  4181 	TInt error;
       
  4182 
       
  4183 	error = iController.CustomCommandSync(iDestinationPckg, 
       
  4184 												EMMFVideoRecordControllerVideoFrameRateFixed, 
       
  4185 												KNullDesC8,
       
  4186 												KNullDesC8,
       
  4187 												pckg);
       
  4188 	if (error == KErrNone)
       
  4189 		{
       
  4190 		aFixedFrameRate = pckg();
       
  4191 		}
       
  4192 	return error;
       
  4193 	}
       
  4194 
       
  4195 EXPORT_C TMMFAudioSetRepeatsConfig::TMMFAudioSetRepeatsConfig()
       
  4196 	:iRepeatNumberOfTimes(0), iTrailingSilence(0), iReserved1(0)
       
  4197 	{
       
  4198 	}
       
  4199 	
       
  4200 EXPORT_C RMMFAudioPlayControllerSetRepeatsCustomCommands::RMMFAudioPlayControllerSetRepeatsCustomCommands(RMMFController& aController) :
       
  4201 	RMMFCustomCommandsBase(aController, KUidInterfaceMMFAudioPlaySetRepeatsController)
       
  4202 	{
       
  4203 	}
       
  4204 	
       
  4205 EXPORT_C TInt RMMFAudioPlayControllerSetRepeatsCustomCommands::SetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence)
       
  4206 	{
       
  4207 	TPckgBuf<TMMFAudioSetRepeatsConfig> configPackage;
       
  4208 	configPackage().iRepeatNumberOfTimes = aRepeatNumberOfTimes;
       
  4209 	configPackage().iTrailingSilence = aTrailingSilence;
       
  4210 	
       
  4211 	return iController.CustomCommandSync(iDestinationPckg, 
       
  4212 										 EMMFAudioPlayControllerSetRepeats, 
       
  4213 										 configPackage,
       
  4214 										 KNullDesC8);
       
  4215 	}
       
  4216 	
       
  4217 EXPORT_C CMMFAudioPlayControllerSetRepeatsCustomCommandParser* CMMFAudioPlayControllerSetRepeatsCustomCommandParser::NewL(MMMFAudioPlayControllerSetRepeatsCustomCommandImplementor& aImplementor)
       
  4218 	{
       
  4219 	return new(ELeave) CMMFAudioPlayControllerSetRepeatsCustomCommandParser(aImplementor);
       
  4220 	}
       
  4221 
       
  4222 CMMFAudioPlayControllerSetRepeatsCustomCommandParser::CMMFAudioPlayControllerSetRepeatsCustomCommandParser(MMMFAudioPlayControllerSetRepeatsCustomCommandImplementor& aImplementor) :
       
  4223 	CMMFCustomCommandParserBase(KUidInterfaceMMFAudioPlaySetRepeatsController),	iImplementor(aImplementor)
       
  4224 	{
       
  4225 	}
       
  4226 
       
  4227 EXPORT_C CMMFAudioPlayControllerSetRepeatsCustomCommandParser::~CMMFAudioPlayControllerSetRepeatsCustomCommandParser()
       
  4228 	{
       
  4229 	}
       
  4230 
       
  4231 void CMMFAudioPlayControllerSetRepeatsCustomCommandParser::HandleRequest(TMMFMessage& aMessage)
       
  4232 	{
       
  4233 	if (aMessage.Destination().InterfaceId() == KUidInterfaceMMFAudioPlaySetRepeatsController)
       
  4234 		{
       
  4235 		TRAPD(error, DoHandleRequestL(aMessage));
       
  4236 		if (error)
       
  4237 			{
       
  4238 			aMessage.Complete(error);
       
  4239 			}
       
  4240 		}
       
  4241 	else
       
  4242 		{
       
  4243 		aMessage.Complete(KErrNotSupported);
       
  4244 		}
       
  4245 	}
       
  4246 
       
  4247 void CMMFAudioPlayControllerSetRepeatsCustomCommandParser::DoHandleRequestL(TMMFMessage& aMessage)
       
  4248 	{
       
  4249 	TBool complete = ETrue;
       
  4250 	switch (aMessage.Function())
       
  4251 		{
       
  4252 	case EMMFAudioPlayControllerSetRepeats:
       
  4253 		complete = DoSetRepeatsL(aMessage);
       
  4254 		break;
       
  4255 	default:
       
  4256 		User::Leave(KErrNotSupported);
       
  4257 		break;
       
  4258 		}
       
  4259 	if (complete)
       
  4260 		{
       
  4261 		aMessage.Complete(KErrNone);
       
  4262 		}
       
  4263 	}
       
  4264 
       
  4265 TBool CMMFAudioPlayControllerSetRepeatsCustomCommandParser::DoSetRepeatsL(TMMFMessage& aMessage)
       
  4266 	{
       
  4267 	TPckgBuf<TMMFAudioSetRepeatsConfig> pckg;
       
  4268 	aMessage.ReadData1FromClientL(pckg);
       
  4269 	User::LeaveIfError(iImplementor.MapcSetRepeats(pckg().iRepeatNumberOfTimes, pckg().iTrailingSilence));
       
  4270 	return ETrue;
       
  4271 	}