epoc32/include/drmaudiosampleplayer.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 2 2fe1408b6811
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@2
     1
/*
williamr@2
     2
* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     3
* All rights reserved.
williamr@2
     4
* This component and the accompanying materials are made available
williamr@4
     5
* under the terms of "Eclipse Public License v1.0"
williamr@2
     6
* which accompanies this distribution, and is available
williamr@4
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@2
     8
*
williamr@2
     9
* Initial Contributors:
williamr@2
    10
* Nokia Corporation - initial contribution.
williamr@2
    11
*
williamr@2
    12
* Contributors:
williamr@2
    13
*
williamr@2
    14
* Description:  DRM Audio player
williamr@2
    15
*
williamr@2
    16
*/
williamr@2
    17
williamr@2
    18
williamr@2
    19
williamr@2
    20
#ifndef DRMAUDIOSAMPLEPLAYER_H
williamr@2
    21
#define DRMAUDIOSAMPLEPLAYER_H
williamr@2
    22
williamr@2
    23
williamr@2
    24
williamr@2
    25
#include <e32base.h>
williamr@4
    26
#include <mdaaudiosampleplayer.h>
williamr@2
    27
williamr@2
    28
// FORWARD DECLARATIONS
williamr@4
    29
class CDrmAudioPlayerAdaptation;
williamr@2
    30
williamr@2
    31
// CLASS DECLARATION
williamr@2
    32
williamr@2
    33
/**
williamr@2
    34
*  Interface class for DRM Player callbacks
williamr@2
    35
*
williamr@2
    36
*
williamr@2
    37
*  @lib DRMAudioPlayer.lib
williamr@2
    38
*  @since Series 60 3.0
williamr@2
    39
*/
williamr@2
    40
williamr@2
    41
class MDrmAudioPlayerCallback
williamr@2
    42
	{
williamr@2
    43
public:
williamr@2
    44
        /**
williamr@2
    45
        * Called by CDrmPlayerUtility when initialization is complete.
williamr@2
    46
        * @since Series 60 3.0
williamr@2
    47
		* @param aError The status of the audio sample after initialisation.
williamr@2
    48
	        The following values have the same specific meaning
williamr@2
    49
	        across all EPOC platforms: KErrNone the
williamr@2
    50
	        sample is ready to play. KErrNotSupported
williamr@2
    51
	        the audio format or particular encoding type is not
williamr@2
    52
	        recognised or not supported. KErrNotFound
williamr@2
    53
	        the audio sample cannot be found.
williamr@2
    54
	        KErrNoMemory there is insufficient memory
williamr@2
    55
	        to play this audio sample. Other values are possible
williamr@2
    56
	        indicating a problem opening the audio sample. These
williamr@2
    57
	        values are dependent on the EPOC platform.
williamr@2
    58
        * @param aDuration The duration of the audio sample.
williamr@2
    59
        */
williamr@2
    60
williamr@2
    61
	virtual void MdapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration) = 0;
williamr@2
    62
williamr@2
    63
        /**
williamr@2
    64
        * Called by CDrmPlayerUtility when playing is complete.
williamr@2
    65
        * @since Series 60 3.0
williamr@2
    66
        * @param aError
williamr@2
    67
		     The status of playback. The following values have the
williamr@2
    68
	         same specific meaning across all EPOC platforms:
williamr@2
    69
	         KErrNone playing of the audio sample is
williamr@2
    70
	         complete. KErrCorrupt the sample data is
williamr@2
    71
	         corrupt. KErrInUse the sound device is in
williamr@2
    72
	         use by another higher priority client. This can happen
williamr@2
    73
	         during playback. KErrNoMemory there is
williamr@2
    74
	         insufficient memory to play this audio sample Other
williamr@2
    75
	         values are possible indicating a problem opening the
williamr@2
    76
	         audio sample. These values are dependent on the EPOC
williamr@2
    77
	         platform.
williamr@2
    78
        */
williamr@2
    79
	virtual void MdapcPlayComplete(TInt aError) = 0;
williamr@2
    80
	};
williamr@2
    81
williamr@2
    82
williamr@2
    83
williamr@2
    84
/**
williamr@2
    85
*  Used by third party developers to play sampled audio data.
williamr@2
    86
The class offers a simple interface to open, play and obtain
williamr@2
    87
information from, sampled audio data. The audio data can be supplied
williamr@2
    88
either in a file (file-based), as a descriptor
williamr@2
    89
(descriptor-based) or as a URL reference.
williamr@2
    90
*
williamr@2
    91
*  @lib DRMAudioPlayer.lib
williamr@2
    92
*  @since Series 60 3.0
williamr@2
    93
*/
williamr@2
    94
class CDrmPlayerUtility : public CBase
williamr@2
    95
	{
williamr@2
    96
	public:
williamr@2
    97
williamr@2
    98
        /**
williamr@2
    99
        * Two-phased constructor.
williamr@2
   100
        */
williamr@2
   101
	IMPORT_C static  CDrmPlayerUtility* NewL(MDrmAudioPlayerCallback& aCallback,TInt aPriority,
williamr@2
   102
															  TMdaPriorityPreference aPref);
williamr@2
   103
williamr@2
   104
        /**
williamr@2
   105
        * Two-phased constructor.
williamr@2
   106
        */
williamr@2
   107
	IMPORT_C static  CDrmPlayerUtility* NewFilePlayerL(const TDesC& aFileName,MDrmAudioPlayerCallback& aCallback,
williamr@2
   108
																		TInt aPriority,
williamr@2
   109
																		TMdaPriorityPreference aPref);
williamr@2
   110
williamr@2
   111
        /**
williamr@2
   112
        * Two-phased constructor.
williamr@2
   113
        */
williamr@2
   114
	IMPORT_C static  CDrmPlayerUtility* NewDesPlayerL(const TDesC8& aData,
williamr@2
   115
													MDrmAudioPlayerCallback& aCallback,
williamr@2
   116
													TInt aPriority,
williamr@2
   117
													TMdaPriorityPreference aPref
williamr@2
   118
													);
williamr@2
   119
williamr@2
   120
        /**
williamr@2
   121
        * Two-phased constructor.
williamr@2
   122
        */
williamr@2
   123
	IMPORT_C static  CDrmPlayerUtility* NewDesPlayerReadOnlyL(const TDesC8& aData,
williamr@2
   124
													MDrmAudioPlayerCallback& aCallback,
williamr@2
   125
													TInt aPriority,
williamr@2
   126
													TMdaPriorityPreference aPref
williamr@2
   127
													);
williamr@2
   128
williamr@2
   129
        /**
williamr@2
   130
        * Destructor.
williamr@2
   131
        */
williamr@2
   132
	IMPORT_C ~CDrmPlayerUtility();
williamr@2
   133
williamr@2
   134
        /**
williamr@2
   135
		* Begins playback of the initialised audio sample at the current volume and priority levels.
williamr@2
   136
        *
williamr@2
   137
        * @since Series 60 3.0
williamr@2
   138
        */
williamr@2
   139
	IMPORT_C void Play();
williamr@2
   140
williamr@2
   141
        /**
williamr@2
   142
		* Stops playback of the audio sample as soon as is possible.
williamr@2
   143
		*
williamr@2
   144
        * @since Series 60 3.0
williamr@2
   145
        */
williamr@2
   146
	IMPORT_C void Stop();
williamr@2
   147
williamr@2
   148
        /**
williamr@2
   149
		* Pauses playback of the audio clip
williamr@2
   150
		*
williamr@2
   151
        * @since Series 60 3.0
williamr@2
   152
		* @return KErrNone on success, otherwise another of the system-wide error codes
williamr@2
   153
        */
williamr@2
   154
	IMPORT_C TInt Pause();
williamr@2
   155
williamr@2
   156
        /**
williamr@2
   157
		* Changes the current playback volume to a specified value.
williamr@2
   158
		*
williamr@2
   159
        * @since Series 60 3.0
williamr@2
   160
        * @param aVolume Any value between 0 (mute) and the maximum volume
williamr@2
   161
        */
williamr@2
   162
	IMPORT_C void SetVolume(TInt aVolume
williamr@2
   163
							);
williamr@2
   164
williamr@2
   165
        /**
williamr@2
   166
		* Sets the number of times the audio sample should be repeated during the playback operation
williamr@2
   167
		*
williamr@2
   168
        * @since Series 60 3.0
williamr@2
   169
williamr@2
   170
        * @param aRepeatNumberOfTimes
williamr@2
   171
		The number of times to repeat the sample. Use 0 for no repeat,
williamr@2
   172
		KMdaRepeatForever for continuous, any other value for number of times.
williamr@2
   173
        * @param aTrailingSilence
williamr@2
   174
		 The duration of silence after the sample has played in microseconds.
williamr@2
   175
        */
williamr@2
   176
	IMPORT_C void SetRepeats(TInt aRepeatNumberOfTimes,
williamr@2
   177
							const TTimeIntervalMicroSeconds& aTrailingSilence
williamr@2
   178
							);
williamr@2
   179
williamr@2
   180
        /**
williamr@2
   181
		* Changes the current playback volume to a specified value.
williamr@2
   182
		*
williamr@2
   183
        * @since Series 60 3.0
williamr@2
   184
        * @param aVolume Any value between 0 (mute) and the maximum volume returned by
williamr@2
   185
        */
williamr@2
   186
	IMPORT_C void SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration);
williamr@2
   187
williamr@2
   188
williamr@2
   189
        /**
williamr@2
   190
		* Returns the duration of the audio sample in microseconds.
williamr@2
   191
		*
williamr@2
   192
        * @since Series 60 3.0
williamr@2
   193
		* @return The duration of the sample in microseconds
williamr@2
   194
        */
williamr@2
   195
	IMPORT_C const TTimeIntervalMicroSeconds& Duration();
williamr@2
   196
williamr@2
   197
        /**
williamr@2
   198
		* Returns an integer representing the maximum volume that the audio clip can support.
williamr@2
   199
		*
williamr@2
   200
        * @since Series 60 3.0
williamr@2
   201
		* @return The maximum permissible volume setting
williamr@2
   202
        */
williamr@2
   203
	IMPORT_C TInt MaxVolume();
williamr@2
   204
williamr@2
   205
        /**
williamr@2
   206
		* Opens an audio clip from a file.
williamr@2
   207
		*
williamr@2
   208
        * @since Series 60 3.0
williamr@2
   209
		* @param aFileName The file containing the audio clip
williamr@2
   210
        */
williamr@2
   211
	IMPORT_C void OpenFileL(const TDesC& aFileName);
williamr@2
   212
williamr@2
   213
        /**
williamr@2
   214
		* Opens an audio clip from a file.
williamr@2
   215
		*
williamr@2
   216
        * @since Series 60 3.0
williamr@2
   217
		* @param aFile The file handle of the file containing the clip
williamr@2
   218
        */
williamr@2
   219
	IMPORT_C void OpenFileL(const RFile& aFile);
williamr@2
   220
williamr@2
   221
        /**
williamr@2
   222
		* Opens an audio clip from a file.
williamr@2
   223
		*
williamr@2
   224
        * @since Series 60 3.0
williamr@2
   225
		* @param aSource The source of the file containing the clip
williamr@2
   226
        */
williamr@2
   227
	IMPORT_C void OpenFileL(const TMMSource& aSource);
williamr@2
   228
williamr@2
   229
        /**
williamr@2
   230
		* Opens an audio clip from a descriptor.
williamr@2
   231
		*
williamr@2
   232
        * @since Series 60 3.0
williamr@2
   233
		* @param aDescriptor The descriptor containing the audio clip
williamr@2
   234
        */
williamr@2
   235
	IMPORT_C void OpenDesL(const TDesC8& aDescriptor);
williamr@2
   236
williamr@2
   237
        /**
williamr@2
   238
		* Opens an audio clip from a URL.
williamr@2
   239
		*
williamr@2
   240
        * @since Series 60 3.0
williamr@2
   241
		* @param aUrl The URL of the audio clip.
williamr@2
   242
		* @param aMimeType The mime type associated with the specified URL/audio clip
williamr@2
   243
        */
williamr@2
   244
	IMPORT_C void OpenUrlL(const TDesC& aUrl, TInt aIapId = KUseDefaultIap, const TDesC8& aMimeType=KNullDesC8);
williamr@2
   245
williamr@2
   246
        /**
williamr@2
   247
		* Closes the current audio clip.
williamr@2
   248
		*
williamr@2
   249
        * @since Series 60 3.0
williamr@2
   250
        */
williamr@2
   251
	IMPORT_C void Close();
williamr@2
   252
williamr@2
   253
        /**
williamr@2
   254
		* Returns the current playback position in microseconds from the start of the clip.
williamr@2
   255
		*
williamr@2
   256
        * @since Series 60 3.0
williamr@2
   257
		* @param aPosition The number of microseconds from the start of the clip to the current play position
williamr@2
   258
		* @return KErrNone on success, otherwise another of the system-wide error codes
williamr@2
   259
        */
williamr@2
   260
	IMPORT_C TInt GetPosition(TTimeIntervalMicroSeconds& aPosition);
williamr@2
   261
williamr@2
   262
        /**
williamr@2
   263
		* Returns the current playback position in microseconds from the start of the clip.
williamr@2
   264
		*
williamr@2
   265
        * @since Series 60 3.0
williamr@2
   266
		* @param aPosition The number of microseconds from the start of the clip to the current play position
williamr@2
   267
		* @return KErrNone on success, otherwise another of the system-wide error codes
williamr@2
   268
        */
williamr@2
   269
	IMPORT_C void SetPosition(const TTimeIntervalMicroSeconds& aPosition);
williamr@2
   270
williamr@2
   271
        /**
williamr@2
   272
		* Set the priority for playback.
williamr@2
   273
		*
williamr@2
   274
        * @since Series 60 3.0
williamr@2
   275
		* @param aPriority
williamr@2
   276
			The priority level to apply, EMdaPriorityMin client can be interrupted by any other client,
williamr@2
   277
			EMdaPriorityNormal client can only be interrupted by a client with a higher priority or
williamr@2
   278
			EMdaPriorityMax client cannot be interrupted by other clients.
williamr@2
   279
		* @param aPref The time and quality preferences to apply.
williamr@2
   280
		* @return KErrNone on success, otherwise another of the system-wide error codes
williamr@2
   281
        */
williamr@2
   282
	IMPORT_C TInt SetPriority(TInt aPriority, TMdaPriorityPreference aPref);
williamr@2
   283
williamr@2
   284
        /**
williamr@2
   285
		* Returns the current playback volume.
williamr@2
   286
		*
williamr@2
   287
        * @since Series 60 3.0
williamr@2
   288
		* @param aVolume A value between 0 (mute) and the maximum volume setting
williamr@2
   289
		* @return KErrNone on success, otherwise another of the system-wide error codes
williamr@2
   290
        */
williamr@2
   291
	IMPORT_C TInt GetVolume(TInt& aVolume);
williamr@2
   292
williamr@2
   293
        /**
williamr@2
   294
		* Gets the number of meta data entries in the current audio clip.
williamr@2
   295
		*
williamr@2
   296
        * @since Series 60 3.0
williamr@2
   297
		* @param aNumEntries On return, contains the number of meta data entries
williamr@2
   298
		* @return KErrNone on success, otherwise another of the system-wide error codes
williamr@2
   299
        */
williamr@2
   300
	IMPORT_C TInt GetNumberOfMetaDataEntries(TInt& aNumEntries);
williamr@2
   301
williamr@2
   302
       /**
williamr@2
   303
		* Returns a specified meta data entry from the audio clip.
williamr@2
   304
		*
williamr@2
   305
        * @since Series 60 3.0
williamr@2
   306
		* @param aMetaDataIndex The index of the meta data entry to return
williamr@2
   307
		* @return The returned meta data entry
williamr@2
   308
        */
williamr@2
   309
	IMPORT_C CMMFMetaDataEntry* GetMetaDataEntryL(TInt aMetaDataIndex);
williamr@2
   310
williamr@2
   311
       /**
williamr@2
   312
		* Defines the size of the current playback window.
williamr@2
   313
		*
williamr@2
   314
        * @since Series 60 3.0
williamr@2
   315
		* @param aStart
williamr@2
   316
			The position defining the start of the window, measured in microseconds.
williamr@2
   317
			If this value is less than zero, it is set to zero. If this value is
williamr@2
   318
			greater than aEnd, then it is swapped with aEnd.
williamr@2
   319
		* @param aEnd
williamr@2
   320
			The position defining the end of the window, measured in microseconds.
williamr@2
   321
			If this value is greater than the value returned by Duration(), it is
williamr@2
   322
			set to the value of Duration(). If this value is less than aStart, then
williamr@2
   323
			it is swapped with aStart.
williamr@2
   324
		* @return KErrNone on success, otherwise another of the system-wide error codes
williamr@2
   325
        */
williamr@2
   326
	IMPORT_C TInt SetPlayWindow(const TTimeIntervalMicroSeconds& aStart,
williamr@2
   327
								const TTimeIntervalMicroSeconds& aEnd);
williamr@2
   328
williamr@2
   329
       /**
williamr@2
   330
		* Clears the current playback window.
williamr@2
   331
		*
williamr@2
   332
        * @since Series 60 3.0
williamr@2
   333
		* @return KErrNone on success, otherwise another of the system-wide error codes
williamr@2
   334
        */
williamr@2
   335
	IMPORT_C TInt ClearPlayWindow();
williamr@2
   336
williamr@2
   337
       /**
williamr@2
   338
		* Sets the current playback balance.
williamr@2
   339
		*
williamr@2
   340
        * @since Series 60 3.0
williamr@2
   341
        * @param aBalance The balance value to set
williamr@2
   342
		* @return KErrNone on success, otherwise another of the system-wide error codes
williamr@2
   343
        */
williamr@2
   344
	IMPORT_C TInt SetBalance(TInt aBalance = KMMFBalanceCenter);
williamr@2
   345
williamr@2
   346
       /**
williamr@2
   347
		* Returns the current playback balance.
williamr@2
   348
		*
williamr@2
   349
        * @since Series 60 3.0
williamr@2
   350
        * @param aBalance On return, contains the current balance setting
williamr@2
   351
		* @return KErrNone on success, otherwise another of the system-wide error codes
williamr@2
   352
        */
williamr@2
   353
	IMPORT_C TInt GetBalance(TInt& aBalance);
williamr@2
   354
williamr@2
   355
       /**
williamr@2
   356
		* Returns the current bit rate
williamr@2
   357
		*
williamr@2
   358
        * @since Series 60 3.0
williamr@2
   359
        * @param aBitRate On return, contains the current bit rate
williamr@2
   360
		* @return KErrNone on success, otherwise another of the system-wide error codes
williamr@2
   361
        */
williamr@2
   362
	IMPORT_C TInt GetBitRate(TUint& aBitRate);
williamr@2
   363
williamr@2
   364
       /**
williamr@2
   365
		* Allows user to register for audio loading callback
williamr@2
   366
		*
williamr@2
   367
        * @since Series 60 3.0
williamr@2
   368
        * @param aCallback Reference to the client to be notified
williamr@2
   369
        */
williamr@2
   370
	IMPORT_C void RegisterForAudioLoadingNotification(MAudioLoadingObserver& aCallback);
williamr@2
   371
williamr@2
   372
       /**
williamr@2
   373
		* Gets the progress of audio loading
williamr@2
   374
		*
williamr@2
   375
        * @since Series 60 3.0
williamr@2
   376
        * @param aPercentageProgress Upon return, contains the percentage progress
williamr@2
   377
        */
williamr@2
   378
	IMPORT_C void GetAudioLoadingProgressL(TInt& aPercentageProgress);
williamr@2
   379
williamr@2
   380
       /**
williamr@2
   381
		* Returns controller implementation parameters
williamr@2
   382
		*
williamr@2
   383
        * @since Series 60 3.0
williamr@2
   384
        * @return The controller information
williamr@2
   385
        */
williamr@2
   386
	IMPORT_C const CMMFControllerImplementationInformation& ControllerImplementationInformationL();
williamr@2
   387
williamr@2
   388
       /**
williamr@2
   389
		* Sends a custom command synchronously to the controller plugin
williamr@2
   390
		*
williamr@2
   391
        * @since Series 60 3.0
williamr@2
   392
        * @param aDestination
williamr@2
   393
			The destination of the custom command, consisting of the unique ID of the
williamr@2
   394
			interface of this custom command and a special handle id KMMFObjectHandleController
williamr@2
   395
			to indicate that the custom command is to be handled by the controller plugin
williamr@2
   396
        * @param aFunction The function number to indicate which function is to be called
williamr@2
   397
			on the controller's custom command interface.
williamr@2
   398
        * @param aDataTo1 A reference to data to be copied to the controller plugin. The exact
williamr@2
   399
			contents of the data are dependent on the custom command interface of the controller. Can be NULL.
williamr@2
   400
        * @param aDataTo2
williamr@2
   401
			A reference to data to be copied to the controller plugin. The exact contents of the data
williamr@2
   402
			are dependent on the custom command interface of the controller. Can be NULL
williamr@2
   403
        * @param aDataFrom
williamr@2
   404
			A reference to an area of memory to which the controller plugin will write any data
williamr@2
   405
			to be passed back to the client. Cannot be NULL
williamr@2
   406
		* @return KErrNone on success, otherwise another of the system-wide error codes
williamr@2
   407
        */
williamr@2
   408
	IMPORT_C TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom);
williamr@2
   409
williamr@2
   410
      /**
williamr@2
   411
		* Sends a custom command synchronously to the controller plugin
williamr@2
   412
		*
williamr@2
   413
        * @since Series 60 3.0
williamr@2
   414
        * @param aDestination
williamr@2
   415
			The destination of the custom command, consisting of the unique ID of the
williamr@2
   416
			interface of this custom command and a special handle id KMMFObjectHandleController
williamr@2
   417
			to indicate that the custom command is to be handled by the controller plugin
williamr@2
   418
        * @param aFunction The function number to indicate which function is to be called
williamr@2
   419
			on the controller's custom command interface.
williamr@2
   420
        * @param aDataTo1 A reference to data to be copied to the controller plugin. The exact
williamr@2
   421
			contents of the data are dependent on the custom command interface of the controller. Can be NULL.
williamr@2
   422
        * @param aDataTo2
williamr@2
   423
			A reference to data to be copied to the controller plugin. The exact contents of the data
williamr@2
   424
			are dependent on the custom command interface of the controller. Can be NULL
williamr@2
   425
		* @return KErrNone on success, otherwise another of the system-wide error codes
williamr@2
   426
        */
williamr@2
   427
	IMPORT_C TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2);
williamr@2
   428
williamr@2
   429
      /**
williamr@2
   430
		* Sends a custom command asynchronously to the controller plugin
williamr@2
   431
		*
williamr@2
   432
        * @since Series 60 3.0
williamr@2
   433
        * @param aDestination
williamr@2
   434
			The destination of the custom command, consisting of the unique ID of the
williamr@2
   435
			interface of this custom command and a special handle id KMMFObjectHandleController
williamr@2
   436
			to indicate that the custom command is to be handled by the controller plugin
williamr@2
   437
        * @param aFunction The function number to indicate which function is to be called
williamr@2
   438
			on the controller's custom command interface.
williamr@2
   439
        * @param aDataTo1 A reference to data to be copied to the controller plugin. The exact
williamr@2
   440
			contents of the data are dependent on the custom command interface of the controller. Can be NULL.
williamr@2
   441
        * @param aDataTo2
williamr@2
   442
			A reference to data to be copied to the controller plugin. The exact contents of the data
williamr@2
   443
			are dependent on the custom command interface of the controller. Can be NULL
williamr@2
   444
        * @param aDataFrom
williamr@2
   445
			A reference to an area of memory to which the controller plugin will write any data
williamr@2
   446
			to be passed back to the client. Cannot be NULL
williamr@2
   447
        * @param aDataFrom
williamr@2
   448
			The TRequestStatus of an active object. This will contain the result of the custom
williamr@2
   449
			command on completion. The exact range of result values is dependent on the custom
williamr@2
   450
			command interface
williamr@2
   451
		* @return KErrNone on success, otherwise another of the system-wide error codes
williamr@2
   452
        */
williamr@2
   453
	IMPORT_C void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom, TRequestStatus& aStatus);
williamr@2
   454
williamr@2
   455
      /**
williamr@2
   456
		* Sends a custom command asynchronously to the controller plugin
williamr@2
   457
		*
williamr@2
   458
        * @since Series 60 3.0
williamr@2
   459
        * @param aDestination
williamr@2
   460
			The destination of the custom command, consisting of the unique ID of the
williamr@2
   461
			interface of this custom command and a special handle id KMMFObjectHandleController
williamr@2
   462
			to indicate that the custom command is to be handled by the controller plugin
williamr@2
   463
        * @param aFunction The function number to indicate which function is to be called
williamr@2
   464
			on the controller's custom command interface.
williamr@2
   465
        * @param aDataTo1 A reference to data to be copied to the controller plugin. The exact
williamr@2
   466
			contents of the data are dependent on the custom command interface of the controller. Can be NULL.
williamr@2
   467
        * @param aDataTo2
williamr@2
   468
			A reference to data to be copied to the controller plugin. The exact contents of the data
williamr@2
   469
			are dependent on the custom command interface of the controller. Can be NULL
williamr@2
   470
        * @param aDataFrom
williamr@2
   471
			A reference to an area of memory to which the controller plugin will write any data
williamr@2
   472
			to be passed back to the client. Cannot be NULL
williamr@2
   473
		* @return KErrNone on success, otherwise another of the system-wide error codes
williamr@2
   474
        */
williamr@2
   475
	IMPORT_C void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TRequestStatus& aStatus);
williamr@2
   476
williamr@2
   477
protected:
williamr@2
   478
	/**
williamr@2
   479
	This member is internal and not intended for use.
williamr@2
   480
	*/
williamr@4
   481
	CDrmAudioPlayerAdaptation* iProperties;
williamr@2
   482
williamr@2
   483
	};
williamr@2
   484
williamr@2
   485
#endif