devsound/devsoundapi/inc/DevSoundStandardCustomInterfaces.h
changeset 0 40261b775718
equal deleted inserted replaced
-1:000000000000 0:40261b775718
       
     1 // Copyright (c) 2003-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 /**
       
    17  @publishedAll
       
    18  @released
       
    19  @file
       
    20 */
       
    21 
       
    22 #ifndef __DEVSOUNDSTANDARDCUSTOMINTERFACES_H__
       
    23 #define __DEVSOUNDSTANDARDCUSTOMINTERFACES_H__
       
    24 
       
    25 #include <e32std.h>
       
    26 
       
    27 /**
       
    28 UID associated with the custom interface MMMFDevSoundCustomInterfaceBitRate.
       
    29 */
       
    30 const TUid KUidCustomInterfaceDevSoundBitRate = {0x101F7DD5};
       
    31 
       
    32 
       
    33 
       
    34 /**
       
    35 This class provides an interface to set and retrive the DevSound bit rate.
       
    36 */
       
    37 class MMMFDevSoundCustomInterfaceBitRate
       
    38 	{	
       
    39 public:
       
    40 	
       
    41 	/**
       
    42 	Gets the bit rates that are supported by DevSound in its current configuration.
       
    43 
       
    44 	@param  aSupportedBitRates
       
    45 	The supported bit rates, in bits per second, shall be appended to this array. Note that 
       
    46 	the array shall be reset by this method.
       
    47 	*/
       
    48 	virtual void GetSupportedBitRatesL(RArray<TInt>& aSupportedBitRates) = 0;
       
    49 
       
    50 	/**
       
    51 	Returns	the current bit rate.
       
    52 
       
    53 	@return	The current bit rate, in bits per second.
       
    54 	*/
       
    55 	virtual TInt BitRateL() = 0;
       
    56 
       
    57 	/**
       
    58 	Sets the bit rate to a new value.
       
    59 
       
    60 	@param  aBitRate
       
    61 	The new bit rate, in bits per second.
       
    62 	*/
       
    63 	virtual void SetBitRateL(TInt aBitRate) = 0;
       
    64 	};
       
    65 
       
    66 
       
    67 /*****************************************************************************/
       
    68 /**
       
    69 UID associated with the Custom interface MMMFDevSoundCustomInterfaceFileBlockLength.
       
    70 */
       
    71 const TUid KUidCustomInterfaceDevSoundFileBlockLength = {0x10273806};
       
    72 
       
    73 /**
       
    74 Custom interface class for setting the file's block length on the hwdevice. 
       
    75 
       
    76 Note also that this interface is just a simple interface to 
       
    77 set file's block length. No checking is perfomed on the values sent (hence the
       
    78 Set methods do not return an error code).
       
    79 */
       
    80 class MMMFDevSoundCustomInterfaceFileBlockLength
       
    81 	{
       
    82 public:
       
    83 	/**
       
    84 	Sets the file's block length on the hwdevice
       
    85 	@param aBlockAlign
       
    86 	       The file's block length 
       
    87 	*/
       
    88 	virtual void SetFileBlockLength(TUint aBlockAlign)=0;
       
    89 	};
       
    90 
       
    91 /*****************************************************************************/
       
    92 /**
       
    93 UID associated with the Custom interface MMMFGsmConfig
       
    94 */
       
    95 const TUid KUidGsmConfig = {0x102825FC};
       
    96 
       
    97 /**
       
    98 This class provides an interface to set and retrive the GSM conversion format.
       
    99 */
       
   100 class MMMFGsmConfig
       
   101 	{
       
   102 public: 
       
   103 	/** The GSM conversion format */
       
   104 	enum TMMFGsmConversionFormat
       
   105 		{
       
   106 		/** no conversion specified */
       
   107 		ENone, 
       
   108 		/** for use in Full rate (06.10) and half rate (GSM 06.20 Half Rate (HR)) Vocoder */
       
   109 		EALaw8bit, 
       
   110 		/** for use in Full rate (06.10) and half rate (GSM 06.20 Half Rate (HR)) Vocoder */
       
   111 		EULaw8bit,
       
   112 		/** for use in GSM 06.60 Enhanced Full Rate (EFR) Vocoder.*/
       
   113 		EAlawPCM
       
   114 		};
       
   115 		
       
   116 	/**
       
   117 	Set the conversion format using the TMMFGsmConversionFormat enum.
       
   118 	This conversion must be set before the coder/decoder is started.
       
   119 
       
   120 	@param aConvFormat - format desired.  For encoding behaviour, format will 
       
   121 	be the input format and for decoding behaviour format will be the output 
       
   122 	format.
       
   123 
       
   124 	@return KErrNone - Format change supported, KErrNotSupported - Format 
       
   125 	change not supported, KErrInUse - Format change attempted whilst decoding.
       
   126 	*/	
       
   127 	virtual TInt SetConversionFormat(TMMFGsmConversionFormat aConvFormat) = 0;
       
   128 
       
   129 	/** 
       
   130 	Provides the current conversion format.  Can be called at any time.
       
   131 
       
   132 	@param aConvFormat - after the call contains the current format.
       
   133 	For encoding behaviour, format will be the input format and for decoding
       
   134 	behaviour format will be the output format.
       
   135 
       
   136 	@return KErrNone if value returned successfully, 
       
   137 			KErrUnknown if value has not been successfully configured using
       
   138 			SetConversionFormat() at least once for the current instance of the
       
   139 			interface and there is no default value.
       
   140 			KErrGeneral for all other error scenario.
       
   141 	*/
       
   142 	virtual TInt ConversionFormat(TMMFGsmConversionFormat& aConvFormat) const = 0;
       
   143 	};
       
   144 
       
   145 
       
   146 /*****************************************************************************/
       
   147 /**
       
   148 UID associated with the Custom interface MSpeechEncoderConfig
       
   149 */
       
   150 const TUid KUidSpeechEncoderConfig = {0x102825FB};
       
   151 
       
   152 /**
       
   153 This class provides an interface to those CMMFHwDevices providing speech encoding. 
       
   154 This interface is used for querying and configuring the operational modes of speech 
       
   155 encoders as supported by those specific encoders. 
       
   156 If a speech encoder does not support a mode provided by the interface, it will return KErrNotSupported.
       
   157 */
       
   158 class MSpeechEncoderConfig 
       
   159 	{
       
   160 public:
       
   161 	/**
       
   162 	Controls voice activity detection (VAD) mode.
       
   163 	This method can be called at all times - while actively encoding or not.
       
   164 	It should be noted that a VAD mode change could also instigate a change in the 
       
   165 	mode of encoding (fixed rate encoding versus variable rate) e.g. in cases where 
       
   166 	VAD requires variable rate encoding.
       
   167 	The effects of activating VAD mode behaviour should be documented in the 
       
   168 	CMMFHwDevice specification implementing it.
       
   169 
       
   170 	@param aVadModeOn ETrue=On, EFalse=Off
       
   171 	@return KErrNone if successful. KErrNotSupported if this method is not implemented 
       
   172 	or not supported by the encoder. 
       
   173 	*/
       
   174 	virtual TInt SetVadMode(TBool aVadModeOn) = 0;
       
   175 
       
   176 	/**
       
   177 	Gets the current state of the voice activity detection (VAD) mode.
       
   178 	This method can be called at all times - while actively encoding or not.
       
   179 
       
   180 	@param aVadModeOn On output ETrue = On, EFalse = Off
       
   181 	@return KErrNone if successful, KErrNotSupported if this method is not implemented 
       
   182 	or not supported by the encoder. 
       
   183 	*/
       
   184 	virtual TInt GetVadMode(TBool& aVadModeOn) = 0;
       
   185 	};
       
   186 
       
   187 /*****************************************************************************/
       
   188 /**
       
   189 UID associated with the Custom interface MAacDecoderConfig
       
   190 */
       
   191 const TUid KUidAacDecoderConfig = {0x102825FD};
       
   192 
       
   193 /**
       
   194 This class provides an interface to the AAC decoder CMMFHwDevice in order 
       
   195 to provide additional configuration information for decoding raw AAC data blocks. 
       
   196 
       
   197 The sample rate can be configured via the CMMFHwDevice::SetConfig() method. 
       
   198 An extension mechanism will be provided for further functionality as required.
       
   199 The CMMFHwDevice does not contain Output channel configuration at time of writing. 
       
   200 The HWA decoders to date have been hardcoded for 2ch (left / right) output. 
       
   201 Additional configuration information may be provided by using extension mechanisms. 
       
   202 */
       
   203 class MAacDecoderConfig 
       
   204 	{
       
   205 public: 
       
   206 
       
   207 	/**
       
   208 	This is a class containing an enumerated type that defines the audio object types 
       
   209 	required for configuring the AAC decoder for decoding raw AACDefined within TAudioConfig.
       
   210 	*/
       
   211 	class TAudioConfig
       
   212 		{
       
   213 	public:
       
   214 		/**  The audio object type */
       
   215 	    enum TAudioObjectType
       
   216 	    	{
       
   217 			/** Null */
       
   218 	       	ENull    = 0,
       
   219 			/** AacMain */
       
   220 	       	EAacMain = 1,
       
   221 			/** AacLc */
       
   222 	       	EAacLc   = 2,
       
   223 			/** AacSsr */
       
   224 	       	EAacSsr  = 3,
       
   225 			/** AacLtp */
       
   226 	       	EAacLtp  = 4,
       
   227 			/** Sbr */
       
   228 	       	ESbr     = 5
       
   229 	       	};
       
   230 		TAudioObjectType iAudioObjectType;
       
   231 		};	
       
   232 
       
   233 public:
       
   234 	/**
       
   235 	Sets additional configuration parameters required for decoding raw AAC. 
       
   236 
       
   237 	This method can be called when encoding is not active - anytime before the CMMFHwDevice is started. 
       
   238 	
       
   239 	For consistent configuration, this method should be called sometime before each 
       
   240 	start is called on the CMMFHwDevice when decoding raw AAC. That is to say the 
       
   241 	CMMFHwDevice is not required to retain prior configuration information, detect raw 
       
   242 	AAC sent to it, and reconfigure the decoder with this saved information after stop 
       
   243 	is called on the CMMFHwDevice. However, calling pause on the CMMFHwDevice implies 
       
   244 	that the next start call will be resuming same content. For this condition, this API 
       
   245 	is not required when restarting the CMMFHwDevice.
       
   246 	
       
   247 	@param aAudioConfig The structure containing the additional information required for decoding the raw AAC.
       
   248 
       
   249 	@return KErrNone if successful or KErrInUse if this method is used when decoding is active. 
       
   250 	*/
       
   251 	virtual TInt SetAudioConfig(TAudioConfig& aAudioConfig) = 0;
       
   252 
       
   253 	/**
       
   254 	Gets additional configuration parameters supported for decoding raw AAC. 
       
   255 	
       
   256 	This method is allowable when encoding is not active - anytime before the CMMFHwDevice is started. 
       
   257 		
       
   258 	@param aSupportedAudioConfigs An array of structures containing the additional supported configurations.
       
   259 
       
   260 	@return KErrNone if successful. 
       
   261 			KErrInUse if this method is used when decoding is active. 
       
   262 	*/
       
   263 	virtual TInt GetSupportedAudioConfigs(RArray<TAudioConfig>& aSupportedAudioConfigs) = 0;
       
   264 	};
       
   265 	
       
   266 /*****************************************************************************/
       
   267 /**
       
   268 UID associated with the Custom interface MEAacPlusDecoderIntfc
       
   269 */
       
   270 const TUid KUidEAacPlusDecoderIntfc = {0x102825FF};
       
   271 
       
   272 /**
       
   273 This class provides an interface to the eAAC+ decoder hwdevice in order to provide configuration information.
       
   274 
       
   275 The Get.. methods can be used to retrieve the last successfully applied configuration parameters.  
       
   276 A message is not sent to adaptation or the decoder. Instead, a locally saved set of the 
       
   277 parameters will be updated upon successful use of ApplyConfig(). It is these saved values that 
       
   278 the proxy maintains that will be returned to the user. For instance, if two interfaces are used 
       
   279 and one interface is used to modify the settings, the other interface's Get… methods would not 
       
   280 return those settings.  The Get.. methods will return an error if a successful use of ApplyConfig() 
       
   281 has not been performed.
       
   282 
       
   283 The Set.. methods are used to update a configuration structure within the implementation of the 
       
   284 interface. When the interface is instantiated, the state of SBR and Downsampled modes will be 
       
   285 disabled. Therefore it is not necessary to configure these parameters before using 
       
   286 ApplyConfig() the first time. However, once modified using this instance of the interface, they 
       
   287 remain in that state until Set.. again.  The values of these items are updated in an internal 
       
   288 structure when each Set.. is called. 
       
   289 
       
   290 The ApplyConfig() method is used to configure the encoder with the parameters specified by 
       
   291 the Set.. methods. ApplyConfig will send back an error (KErrUnknown) if not all items are 
       
   292 Set at least once. This check and the parameter values returned will be implemented in the interface proxy 
       
   293 and will not query the actual decoder. The exception to this is for configuration parameters with defined 
       
   294 default values (see next paragraph). 
       
   295 
       
   296 Calling ApplyConfig() will send these values using a single message to the message handler.
       
   297 ApplyConfig() should fail if it is used during decoding with a KErrInUse (or, as previously stated, 
       
   298 KErrUnknown if a value without a default is not set). Since the interface proxy is not aware of decoding state, 
       
   299 this check would have to be done in the adaptation implementation for this interface.
       
   300 */
       
   301 class MEAacPlusDecoderIntfc 
       
   302 	{
       
   303 public:
       
   304 	/**
       
   305 	Defines additional configuration elements required to decode eAAC+.
       
   306 	*/
       
   307 	enum TAudioObjectType
       
   308         {
       
   309         /** Null */
       
   310         ENull    = 0,
       
   311         /** AacLc */
       
   312         EAacLc   = 2,
       
   313         /** AacLtp */
       
   314         EAacLtp  = 4
       
   315         };
       
   316 
       
   317 	/**
       
   318 	Sets the value of the sampling frequency of the decoder to be configured by the ApplyConfig() 
       
   319 	method. This is the sample rate of the core decoder, not the output sampling frequency of the decoder.
       
   320 	This method can be called at all times but if ApplyConfig() is subsequently called 
       
   321 	after changing this value whilst decoding, a KErrInUse error will result.
       
   322 
       
   323 	@param aInputSamplingFrequency  value of the sampling frequency. 
       
   324 	*/
       
   325 	virtual void SetInputSamplingFrequency(TUint aInputSamplingFrequency) = 0;
       
   326 
       
   327 	/**
       
   328 	Sets the object type of the core decoder to be configured by the ApplyConfig() method.
       
   329 
       
   330 	This method can be called at all times but if ApplyConfig() is subsequently called after 
       
   331 	changing this value whilst decoding, a KErrInUse error will result.
       
   332 
       
   333 	@param  aAudioObjectType TAudioObjectType for core decoder as supported by the decoder.
       
   334 	*/
       
   335 	virtual void SetAudioObjectType(TAudioObjectType aAudioObjectType) = 0;
       
   336 	
       
   337 	/**
       
   338 	Sets the number of channels for the output of the decoder to be configured by the ApplyConfig() 
       
   339 	method. The use of this method is to ensure coordination of output channels rendered by the decoder 
       
   340 	and channel configuration of the audio system. This method does not imply that stereo to mono downmix 
       
   341 	is supported by the decoder. The main purpose is for the case considering the presence of PS. A user 
       
   342 	may not know if the decoder output will be mono or stereo based on header information alone, but may 
       
   343 	configure the decoder for two channel output to match the audio system configuration. If the user were 
       
   344 	to set the output to 1 channel and stereo data is present, the decoder may choose only one channel to 
       
   345 	output or to downmix the stereo to mono. Regarding this interface, it would be more desirable to configure 
       
   346 	the decoder when it is known to be mono source data and rely on downmix from the audio system instead of 
       
   347 	from the decoder. The decoder, however, would provide for duplicating mono data into 2 channel data when 
       
   348 	configured for 2 channels and the source data contains only 1 channel.
       
   349 	This method is allowable at all times - while actively encoding or not, but using ApplyConfig() 
       
   350 	if changing this value while encoding will return an error.
       
   351 		 
       
   352 	@param aNumOfChannels 1 - output one channel audio  = 0; 2 - output two channel audio.
       
   353 	 */
       
   354 	virtual void SetNumOfChannels(TUint aNumOfChannels) = 0;
       
   355 	
       
   356 	/**
       
   357 	Controls the SBR mode of the decoder to be configured by the ApplyConfig() method. 
       
   358 
       
   359 	If SBR is enabled and no SBR data is present, the audio data will be upsampled, 
       
   360 	unless Down Sampled mode is enabled.
       
   361 
       
   362 	This method can be called at all times but if ApplyConfig() is subsequently called 
       
   363 	after changing this value whilst decoding, a KErrInUse error will result.
       
   364 
       
   365 	@param aSbrEnabled ETrue - SBR mode enabled, EFalse - SBR mode disabled 
       
   366 	*/
       
   367 	virtual void SetSbr(TBool aSbrEnabled) = 0;
       
   368 
       
   369 	/**
       
   370 	Controls the downsampled mode of the decoder to be configured by the ApplyConfig() method. This setting is only meaningful if SBR is enabled.
       
   371 
       
   372 	This method can be called at all times but if ApplyConfig() is subsequently called after 
       
   373 	changing this value whilst decoding, a KErrInUse error will result.
       
   374 		 
       
   375 	@param aDsmEnabled ETrue - downsampled mode enabled, EFalse - downsampled mode disabled.
       
   376 	*/
       
   377 	virtual void SetDownSampledMode(TBool aDsmEnabled) = 0;
       
   378 
       
   379 	/**
       
   380 	Used to configure the decoder with parameters passed in the Set methods.
       
   381 
       
   382 	This method can be called all times but will return an KErrInUse if the configuration 
       
   383 	parameters would change while decoding (as none of the set parameters can be changed 
       
   384 	during decoding). This checking operational state of the decoder would be done by the 
       
   385 	adaptation implementation of this interface since the interface proxy is not aware of 
       
   386 	the decoder state. The adaptation implementation will return an error if incorrect values 
       
   387 	are used to configure the decoder.
       
   388 
       
   389 	@return KErrNone if successful, KErrNotSupported if this method is not implemented, 
       
   390 			KErrInUse if encoding in active and values are changed that are not allowed to be 
       
   391 			changed during encoding, KErrArgument if one of the configuration items is not appropriate or not set. 
       
   392 	*/
       
   393 	virtual TInt ApplyConfig() = 0;
       
   394 
       
   395 	/**
       
   396 	Returns the value of the sampling frequency of the decoder that was last successfully 
       
   397 	configured by the ApplyConfig() method.
       
   398 	
       
   399 	This method can be called at all times but must be called after a value has been set via 
       
   400 	the ApplyConfig
       
   401 
       
   402 	@param aInputSamplingFrequency last setting successfully applied using ApplyConfig().
       
   403 
       
   404 	@return KErrNone if value returned successfully, 
       
   405 			KErrUnknown if value has not been successfully configured using ApplyConfig() at 
       
   406 			least once for the current instance of the interface or 
       
   407 			KErrInUse if the encoder is active.
       
   408 	*/
       
   409 	virtual TInt GetInputSamplingFrequency(TUint& aInputSamplingFrequency) = 0;
       
   410 	
       
   411 	/**
       
   412 	Returns the object type of the core decoder that was last successfully configured by the 
       
   413 	ApplyConfig() method.
       
   414 	
       
   415 	This method can be called at all times. 
       
   416 		 
       
   417 	@param aAudioObjectType last setting successfully applied using ApplyConfig().
       
   418 
       
   419 	@return KErrNone if value returned successfully, 
       
   420 			KErrUnknown if value has not been successfully configured using ApplyConfig() 
       
   421 			at least once for the current instance of the interface.
       
   422 	*/
       
   423 	virtual TInt GetAudioObjectType(TAudioObjectType& aAudioObjectType) = 0;
       
   424 
       
   425 	/**
       
   426 	Returns the number of channels that was last successfully configured by the 
       
   427 	ApplyConfig() method.
       
   428 
       
   429 	This method can be called at all times. It will return an error if used before 
       
   430 	ApplyConfig() has been used successfully.
       
   431 
       
   432 	@param aNumOfChannels last setting successfully applied using ApplyConfig().	 
       
   433 
       
   434 	@return KErrNone if value returned successfully, 
       
   435 			KErrUnknown if value has not been successfully configured using ApplyConfig() 
       
   436 			at least once for the current instance of the interface.
       
   437 	*/
       
   438 	virtual TInt GetNumOfChannels(TUint& aNumOfChannels) = 0;
       
   439 
       
   440 	/**
       
   441 	Returns the SBR mode that was last successfully configured by the ApplyConfig() method.
       
   442 
       
   443 	This method can be called at all times.  It will return an error if used before 
       
   444 	ApplyConfig() has been used successfully.
       
   445 
       
   446 	@param aSbrEnabled last setting successfully applied using ApplyConfig().
       
   447 
       
   448 	@return KErrNone if value returned successfully, 
       
   449 			KErrUnknown if value has not been successfully configured using ApplyConfig() 
       
   450 			at least once for the current instance of the interface.	 
       
   451 	*/
       
   452 	virtual TInt GetSbr(TBool& aSbrEnabled) = 0;
       
   453 	
       
   454 	/**
       
   455 	Returns the downsampled mode that was last successfully configured by the ApplyConfig() method.
       
   456 
       
   457 	This method can be called at all times.  It will return an error if used before 
       
   458 	ApplyConfig() has been used successfully.
       
   459 
       
   460 	@param aDsmEnabled last setting successfully applied using ApplyConfig().	 
       
   461 
       
   462 	@return KErrNone if value returned successfully, 
       
   463 			KErrUnknown if value has not been successfully configured using ApplyConfig() at least 
       
   464 			once for the current instance of the interface.
       
   465 	*/
       
   466 	virtual TInt GetDownSampledMode(TBool& aDsmEnabled) = 0;
       
   467 	};
       
   468 	
       
   469 /*****************************************************************************/
       
   470 /**
       
   471 UID associated with the Custom interface MSbcEncoderIntfc
       
   472 */
       
   473 const TUid KUidSbcEncoderIntfc = {0x10282600};
       
   474 
       
   475 /**
       
   476 This class provides an interface to the SBC encoder hwdevice in order to provide configuration information.
       
   477 
       
   478 The Get... supported methods can be used to check capabilities of the encoder by retrieving 
       
   479 the last successfully applied configuration parameters. The purpose of the Get 
       
   480 functions is to return the last successfully applied configuration of decoder by this 
       
   481 interface. A message is not sent to adaptation or the decoder. Instead, a locally saved set 
       
   482 of the parameters will be updated upon successful use of ApplyConfig(). The Get.. methods 
       
   483 return an error (KErrUnknown ) if a successful use of ApplyConfig() has not been performed 
       
   484 apart from the following methods, which return the range of properties supported by the 
       
   485 implementation ( GetSupportedSamplingFrequencies, GetSupportedChannelModes, 
       
   486 GetSupportedNumOfSubbands, GetSupportedAllocationMethods, GetSupportedNumOfBlocks, 
       
   487 GetSupportedBitpoolRange).  These methods do not have setter functions as they are not 
       
   488 configurable and hence will return valid data at all times.
       
   489 
       
   490 ApplyConfig() will send these values using one message with these values in the internally 
       
   491 defined structure. The message handler should define this structure in the SBC messages 
       
   492 header file.   ApplyConfig() should fail (KErrInUse) if it is used during encoding and any 
       
   493 values are changed other than bitpool value. Since the interface proxy is not aware of 
       
   494 encoding state, this check would have to be done in the adaptation implementation for 
       
   495 this interface.  The Bitpool can be updated during encoding to change the bitrate. This would 
       
   496 require the use of the SetBitpoolSize() and ApplyConfig() methods.  Any other parameters can 
       
   497 be changed but will result in a KErrInUse when ApplyConfig() is called.
       
   498 
       
   499 The Set... methods are used update a client-side maintained configuration structure within the 
       
   500 implementation of the interface.  When the structure is completed, ApplyConfig() should be called 
       
   501 to send these client side settings to the actual hwdevice implementation.  There are no default 
       
   502 values for the configuration parameters (hence all values must be set before ApplyConfig() is 
       
   503 called or an error (KErrArgument) will result).
       
   504 
       
   505 @note  This constraint is only true for configurations 
       
   506 where this is supported (e.g. If GetSupportedChannelModes returns KErrNotSupported then SetChannelMode 
       
   507 does not need to be set before ApplyConfig() is called). This check and the parameter values 
       
   508 returned will be implemented in the interface proxy and will not query the actual encoder. If 
       
   509 multiple instances of the interface are created, each would have this requirement.  
       
   510 */
       
   511 class MSbcEncoderIntfc 
       
   512 	{
       
   513 public:
       
   514 	/**
       
   515 	Defines the channel modes for the SBC encoder
       
   516 	*/
       
   517 	enum TSbcChannelMode
       
   518         {
       
   519         /** SbcChannelMono */
       
   520     	ESbcChannelMono,
       
   521         /** SbcChannelDual */
       
   522 		ESbcChannelDual,
       
   523         /** SbcChannelStereo */
       
   524    	 	ESbcChannelStereo,
       
   525         /** SbcChannelJointStereo */
       
   526     	ESbcChannelJointStereo
       
   527         };
       
   528 
       
   529 	/**	
       
   530 	This type defines the allocation methods for the SBC encoder.
       
   531 	*/
       
   532 	enum TSbcAllocationMethod
       
   533        	{
       
   534         /** SbcAllocationSNR */
       
   535     	ESbcAllocationSNR,
       
   536         /** SbcAllocationLoudness */
       
   537     	ESbcAllocationLoudness
       
   538         };
       
   539 
       
   540 	/**
       
   541 	Retrieves the sampling frequencies supported by the encoder. See the class comments for details.
       
   542 	This method can be called at all times.
       
   543 	
       
   544 	@param aSamplingFrequencies Reference to the location to store the array of supported 
       
   545 	sampling frequencies.
       
   546 	 
       
   547 	@return KErrNone if successful, KErrNotSupported if this method is not supported.
       
   548 	*/
       
   549 	virtual TInt GetSupportedSamplingFrequencies(RArray<TUint>& aSamplingFrequencies) = 0;
       
   550 	
       
   551 	/**
       
   552 	Retrieves the channel encoding supported by the encoder. See the class comments for details.
       
   553 	
       
   554 	This method can be called at all times.
       
   555 
       
   556 	@param aChannelModes Reference to the location to store the array of supported channel encoding modes.
       
   557 
       
   558 	@return KErrNone if successful, KErrNotSupported if this method is not supported.
       
   559 	*/
       
   560 	virtual TInt GetSupportedChannelModes(RArray<TSbcChannelMode>& aChannelModes) = 0;
       
   561 	
       
   562 	/**
       
   563 	Retrieves the number of subbands supported by the encoder. See the class comments for details.
       
   564 	
       
   565 	This method can be called at all times.
       
   566 
       
   567 	@param aNumOfSubbands Reference to the location to store the array of supported number of subbands.
       
   568 
       
   569 	@return KErrNone if successful, KErrNotSupported if this method is not supported.
       
   570 	*/
       
   571 	virtual TInt GetSupportedNumOfSubbands(RArray<TUint>& aNumOfSubbands) = 0; 
       
   572 
       
   573 	/**
       
   574 	Retrieves the allocation methods supported by the encoder. See the class comments for details.
       
   575 	
       
   576 	This method can be called at all times.
       
   577 
       
   578 	@param aAllocationMethods Reference to the location to store the array of supported allocation methods.
       
   579 
       
   580 	@return KErrNone if successful, KErrNotSupported if this method is not supported.
       
   581 	*/
       
   582 	virtual TInt GetSupportedAllocationMethods(RArray<TSbcAllocationMethod>& aAllocationMethods) = 0;
       
   583 	
       
   584 	/**
       
   585 	Retrieves the number of blocks supported by the encoder. See the class comments for details.
       
   586 	
       
   587 	This method can be called at all times but if ApplyConfig() is subsequently called 
       
   588 	after changing this value whilst encoding, a KErrInUse error will result.
       
   589 
       
   590 	@param aNumOfBlocks Reference to the location to store the array of supported number of blocks.
       
   591 
       
   592 	@return KErrNone if successful, KErrNotSupported if this method is not supported.
       
   593 	*/
       
   594 	virtual TInt GetSupportedNumOfBlocks(RArray<TUint>& aNumOfBlocks) = 0;
       
   595 	
       
   596 	/**
       
   597 	Retrieves the min and max bitpool values supported by the encoder. See the class comments for details.
       
   598 	
       
   599 	This method can be called at all times but and ApplyConfig() can be called to change the value whilst encoding.
       
   600 
       
   601 	@param aMinSupportedBitpoolSize minimum bitpool value allowed by the encoder.
       
   602 	@param aMaxSupportedBitpoolSize maximum bitpool value allowed by the encoder.
       
   603 
       
   604 	@return KErrNone if successful, KErrNotSupported if this method is not supported.
       
   605 	*/
       
   606 	virtual TInt GetSupportedBitpoolRange(TUint& aMinSupportedBitpoolSize, TUint& aMaxSupportedBitpoolSize) = 0;
       
   607 
       
   608 	/**
       
   609 	Sets the value of the sampling frequency of the encoder to be configured by the ApplyConfig() method.
       
   610 
       
   611 	This method can be called at all times but if ApplyConfig() is subsequently called 
       
   612 	after changing this value whilst encoding, a KErrInUse error will result.
       
   613 
       
   614 	@param aSamplingFrequency values according to standard and supported by encoder.
       
   615  	*/
       
   616 	virtual void SetSamplingFrequency(TUint aSamplingFrequency) = 0;
       
   617 
       
   618 	/**
       
   619 	Sets the channel mode of the encoder to be configured by the ApplyConfig() method. 
       
   620 	See the class comments for details.
       
   621 	
       
   622 	This method can be called at all times but if ApplyConfig() is subsequently called after 
       
   623 	changing this value whilst encoding, a KErrInUse error will result.
       
   624 
       
   625 	@param aChannelMode (ESbcChannelMono, ESbcChannelDual, ESbcChannelStereo, 
       
   626 			ESbcChannelJointStereo) when supported by encoder.	 
       
   627 
       
   628 	*/
       
   629 	virtual void SetChannelMode(TSbcChannelMode aChannelMode) = 0;
       
   630 
       
   631 	/**
       
   632 	Sets the channel mode of the encoder to be configured by the ApplyConfig() method.  
       
   633 
       
   634 	This method can be called at all times but if ApplyConfig() is subsequently called after 
       
   635 	changing this value whilst encoding, a KErrInUse error will result.
       
   636 
       
   637 	@param aNumOfSubbands values according to standard and supported by encoder.	
       
   638 
       
   639 	*/
       
   640 	virtual void SetNumOfSubbands(TUint aNumOfSubbands) = 0;
       
   641 
       
   642 	/**
       
   643 	Sets the allocation method of the encoder to be configured by the ApplyConfig() method.
       
   644 
       
   645 	This method can be called at all times but if ApplyConfig() is subsequently called after 
       
   646 	changing this value whilst encoding, a KErrInUse error will result.
       
   647 		 
       
   648 	@param aAllocationMethod ESbcAllocationSNR, ESbcAllocationLoudness when supported by encoder
       
   649 
       
   650 	*/
       
   651 	virtual void SetAllocationMethod(TSbcAllocationMethod aAllocationMethod) = 0;
       
   652 
       
   653 	/**
       
   654 	Sets the number of blocks of the encoder to be configured by the ApplyConfig() method.
       
   655 
       
   656 	This method can be called at all times but if ApplyConfig() is subsequently called after 
       
   657 	changing this value whilst encoding, a KErrInUse error will result.
       
   658 		
       
   659 	@param aNumOfBlocks values according to standard and supported by encoder.	  	 
       
   660 	*/
       
   661 	virtual void SetNumOfBlocks(TUint aNumOfBlocks) = 0;
       
   662 	
       
   663 	/**
       
   664 	Sets the size of the bitpool of the encoder to be configured by the ApplyConfig() method.  
       
   665 
       
   666 	This method is allowable at all times - while actively encoding or not.
       
   667 
       
   668 	@param aBitpoolSize values according to standard and supported by encoder.
       
   669 
       
   670 	*/
       
   671 	virtual void SetBitpoolSize(TUint aBitpoolSize) = 0;
       
   672 
       
   673 	/**
       
   674 	Used to configure the encoder with parameters passed in the Set… methods.
       
   675 	This method can be called at all times - while actively encoding or not. 
       
   676 	An error (KErrInUse) will be returned if any configuration parameter, other 
       
   677 	than bitpool size, is changed while encoding. This checking operational 
       
   678 	state of the encoder would be done by the adaptation implementation of this 
       
   679 	interface since the interface proxy is not aware of the encoder state. Also, 
       
   680 	the adaptation implementation will return an error if incorrect values are 
       
   681 	used to configure the encoder.
       
   682 	
       
   683 	@note  Even though some preliminary checking is done in the set methods (to see 
       
   684 	if it is valid to set the values at all) it is expected that 
       
   685 
       
   686 	@return KErrNone if successful, 
       
   687 			KErrNotSupported if this method is not implemented, 
       
   688 			KErrInUse if encoding in active and values are changed that are not 
       
   689 			allowed to be changed during encoding, 
       
   690 			KErrArgument if one of the configuration items is not appropriate or 
       
   691 			if all the values are not set (unless some of the values are not 
       
   692 			supported, in which case these values should be ignored).	 
       
   693 	*/
       
   694 	virtual TInt ApplyConfig() = 0;
       
   695 
       
   696 	/**
       
   697 	Gets the value of the sampling frequency of the encoder that was last successfully 
       
   698 	configured by the ApplyConfig() method.
       
   699 
       
   700 	This method can be called at all times - while actively encoding or not, but will 
       
   701 	return an error if used before ApplyConfig() has been used successfully.
       
   702 
       
   703 	@param aSamplingFrequency last setting successfully applied using ApplyConfig().
       
   704 
       
   705 	@return KErrNone if value returned successfully, 
       
   706 			KErrUnknown if value has not been successfully configured using ApplyConfig() 
       
   707 			at least once for the current instance of the interface, 
       
   708 			KErrNotSupported if this method is not implemented (to match its set and 
       
   709 			getsupported methods).
       
   710 	*/
       
   711 	virtual TInt GetSamplingFrequency(TUint& aSamplingFrequency) = 0;
       
   712 
       
   713 	/**
       
   714 	Gets the channel mode of the encoder that was last successfully configured by the 
       
   715 	ApplyConfig() method.
       
   716 
       
   717 	This method can be called at all times - while actively encoding or not, but will 
       
   718 	return an error if used before ApplyConfig() has been used successfully.
       
   719 
       
   720 	@param aChannelMode last setting successfully applied using ApplyConfig(). 
       
   721 
       
   722 	@return KErrNone if value returned successfully, 
       
   723 			KErrUnknown if value has not been successfully configured using ApplyConfig() 
       
   724 			at least once for the current instance of the interface.
       
   725 	*/
       
   726 	virtual TInt GetChannelMode(TSbcChannelMode& aChannelMode) = 0;
       
   727 
       
   728 	/**
       
   729 	Gets the channel mode of the encoder that was last successfully configured by the 
       
   730 	ApplyConfig() method.
       
   731 
       
   732 	This method can be called at all times - while actively encoding or not, 
       
   733 	but will return an error if used before ApplyConfig() has been used successfully.
       
   734 		 
       
   735 	@param aNumOfSubbands last setting successfully applied using ApplyConfig().
       
   736 	
       
   737 	@return KErrNone if value returned successfully, 
       
   738 			KErrUnknown if value has not been successfully configured using ApplyConfig() 
       
   739 			at least once for the current instance of the interface, 
       
   740 			KErrNotSupported if this method is not implemented (to match its set and 
       
   741 			getsupported methods)
       
   742 	*/
       
   743 	virtual TInt GetNumOfSubbands(TUint& aNumOfSubbands) = 0;
       
   744 	
       
   745 	/**
       
   746 	Gets the number of blocks of the encoder that was last successfully configured by 
       
   747 	the ApplyConfig() method.
       
   748 
       
   749 	This method can be called at all times - while actively encoding or not, but will 
       
   750 	return an error if used before ApplyConfig() has been used successfully.
       
   751 
       
   752 	@param aNumOfBlocks last setting successfully applied using ApplyConfig().
       
   753 
       
   754 	@return KErrNone if value returned successfully, 
       
   755 			KErrUnknown if value has not been successfully configured using ApplyConfig() 
       
   756 			at least once for the current instance of the interface, 
       
   757 			KErrNotSupported if this method is not implemented (to match its set and 
       
   758 			getsupported methods)
       
   759 	*/
       
   760 	virtual TInt GetNumOfBlocks(TUint& aNumOfBlocks) = 0;
       
   761 
       
   762 	/**
       
   763 	Gets the allocation method of the encoder that was last successfully configured 
       
   764 	by the ApplyConfig() method.
       
   765 
       
   766 	This method can be called at all times - while actively encoding or not, but will 
       
   767 	return an error if used before ApplyConfig() has been used successfully.
       
   768 	@param aAllocationMethod last setting successfully applied using ApplyConfig().
       
   769 
       
   770 	@return KErrNone if value returned successfully, 
       
   771 			KErrUnknown if value has not been successfully configured using ApplyConfig() 
       
   772 			at least once for the current instance of the interface, 
       
   773 			KErrNotSupported if this method is not implemented (to match its set and 
       
   774 			getsupported methods).
       
   775 	*/
       
   776 	virtual TInt GetAllocationMethod(TSbcAllocationMethod& aAllocationMethod) = 0;
       
   777 
       
   778 	/**
       
   779 	Gets the size of the bitpool of the encoder that was last successfully 
       
   780 	configured by the ApplyConfig() method.
       
   781 
       
   782 	This method can be called at all times - while actively encoding or not, but 
       
   783 	will return an error if used before ApplyConfig() has been used successfully.
       
   784 
       
   785 	@param aBitpoolSize last setting successfully applied using ApplyConfig().
       
   786 
       
   787 	@return KErrNone if value returned successfully, 
       
   788 			KErrUnknown if value has not been successfully configured using ApplyConfig() 
       
   789 			at least once for the current instance of the interface, 
       
   790 			KErrNotSupported if this method is not implemented (to match its set and 
       
   791 			getsupported methods).
       
   792 	*/
       
   793 	virtual TInt GetBitpoolSize(TUint& aBitpoolSize) = 0;
       
   794 	}; 
       
   795 
       
   796 /*****************************************************************************/
       
   797 /**
       
   798 UID associated with the Custom interface MG711DecoderIntfc
       
   799 */
       
   800 const TUid KUidG711DecoderIntfc = {0x10282601};
       
   801 
       
   802 /**
       
   803 This class provides an interface to the G711 decoder CMMFHwDevice in order to provide 
       
   804 additional configuration information.
       
   805 */
       
   806 class MG711DecoderIntfc 
       
   807 	{
       
   808 public:
       
   809 	/** The Decoder mode */
       
   810 	enum TDecodeMode
       
   811         {
       
   812         /** DecALaw */
       
   813         EDecALaw,
       
   814         /** DecULaw */
       
   815         EDecULaw
       
   816         };
       
   817 
       
   818 	/**
       
   819 	Informs the decoder of the encoded data format that will be sent to it.
       
   820 
       
   821 	This method can be called when decoding is not active - anytime before started 
       
   822 	or after stopped. 
       
   823 	@param 	aDecodeMode the decode mode.
       
   824 
       
   825 	@return KErrNone if successful. 
       
   826 			KErrInUse if this method is used when encoding is active. 
       
   827 			KErrNotSupported if this method is not implemented. 
       
   828 	*/
       
   829 	virtual TInt SetDecoderMode(TDecodeMode aDecodeMode) = 0;
       
   830 	
       
   831 	/**
       
   832 	Queries the decoder of the encoded data format that has been active.
       
   833 
       
   834 	This method can be called at all times.
       
   835 	@param 	aDecodeMode the decode mode.
       
   836 
       
   837 	@return KErrNone if successful. 
       
   838 			KErrInUse if this method is used when encoding is active. 
       
   839 			KErrNotSupported if this method is not implemented. 
       
   840 	*/
       
   841 	virtual TInt GetDecoderMode(TDecodeMode& aDecodeMode) = 0;
       
   842 
       
   843 	/** 	
       
   844 	Used to enable and disable the comfort noise generation capability.
       
   845 
       
   846 	This method can be called when decoding is not active - anytime before started 
       
   847 	or after stopped. 
       
   848 	
       
   849 	@param 	aCng ETrue = Comfort Noise Generation enabled; EFalse = Comfort Noise 
       
   850 	Generation disabled
       
   851 	
       
   852 	@return	KErrNone if successful. 
       
   853 			KErrInUse if this method is used when encoding is active. 
       
   854 			KErrNotSupported if this method is not implemented. 
       
   855 	*/
       
   856 	virtual TInt SetComfortNoiseGeneration(TBool aCng) = 0;
       
   857 
       
   858 	/** 	
       
   859 	Used to find out if comfort noise generation is enabled or not.
       
   860 
       
   861 	This method can be called when decoding is not active - anytime before started 
       
   862 	or after stopped. 
       
   863 
       
   864 	@param 	aCng ETrue = Comfort Noise Generation enabled; EFalse = Comfort Noise 
       
   865 	Generation disabled
       
   866 
       
   867 	@return	KErrNone if successful. 
       
   868 			KErrInUse if this method is used when encoding is active. 
       
   869 			KErrNotSupported if this method is not implemented. 
       
   870 	*/
       
   871 	virtual TInt GetComfortNoiseGeneration(TBool& aCng) = 0;
       
   872 
       
   873 	/**
       
   874 	Used to enable and disable the packet loss concealment capability.
       
   875 
       
   876 	This can be called when decoding is not active - anytime before started or after 
       
   877 	stopped. 
       
   878 
       
   879 	@param	aPlc ETrue = plc enabled; EFalse = plc disabled
       
   880 
       
   881 	@return KErrNone if successful. KErrInUse if this method is used when encoding is 
       
   882 	active. KErrNotSupported if this method is not implemented.
       
   883 	*/
       
   884 	virtual TInt SetPacketLossConcealment(TBool aPlc) = 0;
       
   885 
       
   886 	/** 	
       
   887 	Used to find out if packet loss concealment capability is enabled or not.
       
   888 
       
   889 	This method can be called when decoding is not active - anytime before started or 
       
   890 	after stopped. 
       
   891 
       
   892 	@param 	aPlc ETrue = packet loss concealment enabled; EFalse = packet loss 
       
   893 	concealment disabled
       
   894 
       
   895 	@return	KErrNone if successful. KErrInUse if this method is used when encoding is active. 
       
   896 			KErrNotSupported if this method is not implemented. 
       
   897 	*/
       
   898 	virtual TInt GetPacketLossConcealment(TBool& aPlc) = 0;
       
   899 
       
   900 	};
       
   901 	
       
   902 /*****************************************************************************/
       
   903 /**
       
   904 UID associated with the Custom interface MG711EncoderIntfc
       
   905 */
       
   906 const TUid KUidG711EncoderIntfc = {0x10282602};
       
   907 
       
   908 /**
       
   909 This class provides an interface to the G711 encoder CMMFHwDevice in order to provide 
       
   910 additional configuration information.
       
   911 */
       
   912 class MG711EncoderIntfc 
       
   913 	{
       
   914 public:
       
   915 	/** The encoder mode */
       
   916 	enum TEncodeMode
       
   917         {
       
   918         /** EncALaw */
       
   919         EEncALaw,
       
   920         /** EncULaw */
       
   921         EEncULaw
       
   922         };
       
   923 
       
   924 	/** 	
       
   925 	Configures the encoder's encoding format.
       
   926 
       
   927 	This method can be called when decoding is not active - anytime before started or 
       
   928 	after stopped. 
       
   929 
       
   930 	@param 	aEncodeMode the encode mode.
       
   931 
       
   932 	@return	KErrNone if successful. KErrInUse if this method is used when encoding is active. 
       
   933 			KErrNotSupported if this method is not implemented. 
       
   934 	*/
       
   935 	virtual TInt SetEncoderMode(TEncodeMode aEncodeMode) = 0;
       
   936 
       
   937 	/** 	
       
   938 	Controls voice activity detection (VAD) mode.
       
   939 
       
   940 	This method can be called at all times.
       
   941 
       
   942 	@param 	aVadModeOn ETrue=On, EFalse=Off
       
   943 
       
   944 	@return	KErrNone if successful, 
       
   945 			KErrNotSupported if this method is not implemented or not supported by the encoder
       
   946 	*/
       
   947 	virtual TInt SetVadMode(TBool aVadModeOn) = 0;
       
   948 
       
   949 	/** 
       
   950 	Gets the current state of the voice activity detection (VAD) mode.
       
   951 
       
   952 	This method can be called at all times - while actively encoding or not.
       
   953 
       
   954 	@param 	aVadModeOn On output ETrue=On, EFalse=Off
       
   955 
       
   956 	@return	KErrNone if successful. 
       
   957 			KErrNotSupported if this method is not implemented or VAD is not supported by the encoder. 
       
   958 	*/
       
   959 	virtual TInt GetVadMode(TBool& aVadModeOn) = 0;
       
   960 	};
       
   961 
       
   962 /*****************************************************************************/
       
   963 /**
       
   964 UID associated with the Custom interface MG729DecoderIntfc
       
   965 */
       
   966 const TUid KUidG729DecoderIntfc = {0x10282603};
       
   967 
       
   968 /**
       
   969 This class provides an interface to the G729 decoder CMMFHwDevice in order to provide additional 
       
   970 configuration information.
       
   971 */
       
   972 class MG729DecoderIntfc
       
   973 	{
       
   974 public:
       
   975 	/**
       
   976 	Informs the decoder that the next buffer sent to it will contain bad LSF data.
       
   977 
       
   978 	This method can be called when decoding is active.
       
   979  
       
   980 	This method will be called after a buffer has been received from the CMMFHwDevice, 
       
   981 	and before it is returned to the CMMFHwDevice.
       
   982 
       
   983 	@return	KErrNone if successful. 
       
   984 			KErrInUse if this method is used out of sequence. 
       
   985 			KErrNotSupported if this method is not implemented. 
       
   986 	*/
       
   987 	virtual	TInt BadLsfNextBuffer() = 0;
       
   988 	};
       
   989 
       
   990 /*****************************************************************************/
       
   991 /**
       
   992 UID associated with the Custom interface MG729EncoderIntfc
       
   993 */
       
   994 const TUid KUidG729EncoderIntfc = {0x10282604};
       
   995 
       
   996 /**
       
   997 This class provides an interface to the G729 encoder CMMFHwDevice in order to provide 
       
   998 additional configuration information.
       
   999 */
       
  1000 class MG729EncoderIntfc
       
  1001 	{
       
  1002 public:
       
  1003 	/** 
       
  1004 	Controls voice activity detection (VAD) mode.
       
  1005 
       
  1006 	This method is allowable at all times - while actively encoding or not.
       
  1007 	@param 	aVadModeOn ETrue=On, EFalse=Off
       
  1008 
       
  1009 	@return	KErrNone if successful. KErrNotSupported if this method is not implemented 
       
  1010 	or not supported by the encoder. 
       
  1011 	*/
       
  1012 	virtual TInt SetVadMode(TBool aVadModeOn) = 0;
       
  1013 
       
  1014 	/**
       
  1015 	Gets the current state of the voice activity detection (VAD) mode.
       
  1016 
       
  1017 	This method can be called at all times - while actively encoding or not.
       
  1018 
       
  1019 	@param 	aVadModeOn On output ETrue=On, EFalse=Off
       
  1020 	@return	KErrNone if successful. KErrNotSupported if this method is not implemented 
       
  1021 	or VAD is not supported by the encoder. 
       
  1022 	*/
       
  1023 	virtual TInt GetVadMode(TBool& aVadModeOn) = 0;
       
  1024 	};
       
  1025 
       
  1026 /*****************************************************************************/
       
  1027 /**
       
  1028 UID associated with the Custom interface MIlbcDecoderIntfc
       
  1029 */
       
  1030 const TUid KUidIlbcDecoderIntfc = {0x10282605};
       
  1031 
       
  1032 /**
       
  1033 This class provides an interface to the Ilbc decoder CMMFHwDevice in order to provide 
       
  1034 additional configuration information.
       
  1035 */
       
  1036 class MIlbcDecoderIntfc
       
  1037 	{
       
  1038 public:
       
  1039 	/** The Ibc decoder mode */
       
  1040 	enum TDecodeMode
       
  1041         {
       
  1042         /** 20msFrame */
       
  1043         E20msFrame,
       
  1044         /** 30msFrame */
       
  1045         E30msFrame
       
  1046         };
       
  1047 
       
  1048 	/**
       
  1049 	Informs the decoder of the encoded data format that will be sent to it.
       
  1050 
       
  1051 	This method can be called when decoding is not active - anytime before started or 
       
  1052 	after stopped. 
       
  1053 
       
  1054 	@param 	aDecodeMode the decode mode.
       
  1055 
       
  1056 	@return	KErrNone if successful. 
       
  1057 			KErrInUse if this method is used when decoding is active. 
       
  1058 			KErrNotSupported if this method is not implemented.
       
  1059 	*/
       
  1060 	virtual TInt SetDecoderMode(TDecodeMode aDecodeMode) = 0;
       
  1061 
       
  1062 	/**
       
  1063 	Used to enable and disable the comfort noise generation capability.
       
  1064 
       
  1065 	This method is allowable when decoding is not active - anytime before started or 
       
  1066 	after stopped. 
       
  1067 
       
  1068 	@param 	aCng ETrue = comfort noise generation enabled; EFalse = comfort noise 
       
  1069 	generation disabled
       
  1070 
       
  1071 	@return	KErrNone if successful. 
       
  1072 			KErrInUse if this method is used when encoding is active. 
       
  1073 			KErrNotSupported if this method is not implemented. 
       
  1074 	*/
       
  1075 	virtual TInt SetComfortNoiseGeneration(TBool aCng) = 0;
       
  1076 
       
  1077 	/**
       
  1078 	Used to find out if comfort noise generation is enabled or not.
       
  1079 
       
  1080 	This method is allowable when decoding is not active - anytime before started or 
       
  1081 	after stopped. 
       
  1082 
       
  1083 	@param 	aCng On output ETrue = comfort noise generation enabled; EFalse = comfort 
       
  1084 	noise generation disabled
       
  1085 
       
  1086 	@return	KErrNone if successful. 
       
  1087 			KErrInUse if this method is used when encoding is active. 
       
  1088 			KErrNotSupported if this method is not implemented. 
       
  1089 	*/
       
  1090 	virtual TInt GetComfortNoiseGeneration(TBool& aCng) = 0;
       
  1091 	};
       
  1092 
       
  1093 /*****************************************************************************/
       
  1094 /**
       
  1095 UID associated with the Custom interface MIlbcEncoderIntfc
       
  1096 */
       
  1097 const TUid KUidIlbcEncoderIntfc = {0x10282606};
       
  1098 
       
  1099 /**
       
  1100 This class provides an interface to the Ilbc encoder CMMFHwDevice in order to provide 
       
  1101 additional configuration information.
       
  1102 */
       
  1103 class MIlbcEncoderIntfc
       
  1104 	{
       
  1105 public:
       
  1106 	/** The Ibc encoder mode*/
       
  1107 	enum TEncodeMode
       
  1108         {
       
  1109         /** 20msFrame */
       
  1110         E20msFrame,
       
  1111         /** 30msFrame */
       
  1112         E30msFrame
       
  1113         };
       
  1114 
       
  1115 	/**
       
  1116 	Configures the encoder's encoding format.
       
  1117 
       
  1118 	This method is allowable when encoding is not active - anytime before started or 
       
  1119 	after stopped. 
       
  1120 
       
  1121 	@param 	aEncodeMode the encode mode.
       
  1122 
       
  1123 	@return	KErrNone if successful. 
       
  1124 			KErrInUse if this method is used when encoding is active. 
       
  1125 			KErrNotSupported if this method is not implemented. 
       
  1126 	*/
       
  1127 	virtual TInt SetEncoderMode(TEncodeMode aEncodeMode) = 0;
       
  1128 
       
  1129 	/**
       
  1130 	Controls voice activity detection (VAD) mode.
       
  1131 
       
  1132 	This method is allowable at all times - while actively encoding or not.
       
  1133 
       
  1134 	@param 	aVadModeOn ETrue=On, EFalse=Off
       
  1135 
       
  1136 	@return	KErrNone if successful. 
       
  1137 			KErrNotSupported if this method is not implemented or not supported by the encoder. 
       
  1138 	*/
       
  1139 	virtual TInt SetVadMode(TBool aVadModeOn) = 0;
       
  1140 
       
  1141 	/**
       
  1142 	Gets the encoder's current encoding format.
       
  1143 
       
  1144 	This method is allowable when encoding is not active - anytime before started or 
       
  1145 	after stopped. 
       
  1146 
       
  1147 	@param 	&aEncodeMode the encode mode.
       
  1148 
       
  1149 	@return	KErrNone if successful. 
       
  1150 			KErrInUse if this method is used when encoding is active. 
       
  1151 			KErrNotSupported if this method is not implemented. 
       
  1152 	*/
       
  1153 	virtual TInt GetEncoderMode(TEncodeMode &aEncodeMode) = 0;
       
  1154 
       
  1155 	/**
       
  1156 	Gets the current state of the voice activity detection (VAD) mode.
       
  1157 
       
  1158 	This method is allowable at all times - while actively encoding or not.
       
  1159 
       
  1160 	@param 	aVadModeOn On output ETrue=On, EFalse=Off
       
  1161 
       
  1162 	@return	KErrNone if successful. 
       
  1163 			KErrNotSupported if this method is not implemented or VAD is not supported 
       
  1164 			by the encoder. 
       
  1165 	*/
       
  1166 	virtual TInt GetVadMode(TBool& aVadModeOn) = 0;
       
  1167 	};
       
  1168 
       
  1169 /*****************************************************************************/
       
  1170 /**
       
  1171 UID associated with the Custom interface MMMFErrorConcealmentIntfc
       
  1172 */
       
  1173 const TUid KUidErrorConcealmentIntfc = {0x10282607};
       
  1174 
       
  1175 /**
       
  1176 This custom interface can be used to indicate that data has been lost. Typical usage 
       
  1177 would be during streaming. Lost packets of audio data would not get played, but the 
       
  1178 video data may still be available for playback. If video playback is synchronized to 
       
  1179 audio then this API can be used to indicate that audio data is lost so that video 
       
  1180 playback can continue. It could also be used for an audio-only source to maintain 
       
  1181 synchronization in time if data is lost.
       
  1182 */
       
  1183 class MMMFErrorConcealmentIntfc
       
  1184 	{
       
  1185 public:
       
  1186 	/**
       
  1187 	Indicates that next buffer sent to CMMFHwDevice will not contain any valid data, 
       
  1188 	and that a single frame of data has been lost, and that error concealment should 
       
  1189 	be provided for that lost frame. This method will be called after a buffer has been 
       
  1190 	received from the Hardware Device, and before it is returned to the Hardware Device.
       
  1191 
       
  1192 	@return	KErrNone if successful. 
       
  1193 			KErrInUse if this method is used out of sequence. 
       
  1194 			KErrNotSupported if this method is not implemented.
       
  1195 	*/
       
  1196 	virtual TInt ConcealErrorForNextBuffer() = 0;
       
  1197 	/**
       
  1198 	Puts the CMMFHwDevice into frame-based operation. This may be required in cases where
       
  1199 	 the decoder only supports error concealment in a frame-based mode of operation. 
       
  1200 	 Operating in frame-based mode means that the decoder requires that each buffer it 
       
  1201 	 receives contains only complete data frames. 
       
  1202 
       
  1203 	Frame mode is limited to a single frame per buffer. The alternative to frame-based mode 
       
  1204 	is buffer-based mode, the default interface for CMMFHwDevices and decoders. 
       
  1205 
       
  1206 	In buffer-based mode, complete data frames are not required to be contained within a 
       
  1207 	single buffer. A data frame may span consecutive data buffers in buffer-based mode. 
       
  1208 
       
  1209 	As it is less efficient than buffer-based mode, Frame-based mode should be used as a 
       
  1210 	less-preferred option where errors are present and the CMMFHwDevice implementation would 
       
  1211 	not be tolerant to buffer-based mode error.  This condition would be indicated by 
       
  1212 	FrameModeRqrdForEC resulting in its parameter being set to ETrue.
       
  1213   
       
  1214 	This method can be called when decoding is not active - anytime before the CMMFHwDevice 
       
  1215 	is started, or after it is stopped.
       
  1216 
       
  1217 	@param	aFrameModeOn ETrue = frame mode on; EFalse = frame mode off.
       
  1218 	
       
  1219 	@return KErrNone if successful. 
       
  1220 			KErrInUse if this method is used out of sequence. 
       
  1221 			KErrNotSupported if this method is not implemented.	
       
  1222 	*/
       
  1223 	virtual TInt SetFrameMode(TBool aFrameModeOn) = 0;
       
  1224 
       
  1225 	/**
       
  1226 	Queries the CMMFHwDevice to find out if frame mode is required by the implementing 
       
  1227 	CMMFHwDevice in order for it to support error concealment.
       
  1228 	
       
  1229 	This method is allowable when decoding is not active - anytime before the CMMFHwDevice 
       
  1230 	is started, or after it is stopped.
       
  1231 	@param	aFrameModeRqrd ETrue = frame mode required; EFalse = frame mode not required
       
  1232 	@return	KErrNone if successful. 
       
  1233 			KErrInUse if this method is used during decoding. 
       
  1234 			KErrNotSupported if this method is not implemented. 
       
  1235 	*/
       
  1236 	virtual TInt FrameModeRqrdForEC(TBool& aFrameModeRqrd) = 0;
       
  1237 	};
       
  1238 
       
  1239 /*****************************************************************************/
       
  1240 /**
       
  1241 UID associated with the Custom interface MAudioVibraControl
       
  1242 */
       
  1243 const TUid KUidAudioVibraControl = {0x10282608};
       
  1244 
       
  1245 /**
       
  1246 This class provides an interface for controlling vibra. DevSound should interpret the 
       
  1247 instantiation of this interface as a vibra control request by the user. The default vibra 
       
  1248 behavior implemented by the DevSound for the associated stream will not be performed while 
       
  1249 the user has control, In other words whilst this interface is instantiated. DevSound default vibra behavior 
       
  1250 for the associated stream will return once this interface is deleted. Other instances of 
       
  1251 DevSound may be instantiated for other audio streams at the same time. When multiple instances 
       
  1252 of DevSound are instantiated, priority and preference values are used to determine which audio 
       
  1253 streams are rendered. Prioritization of vibra control is determined by adaptation. Due to 
       
  1254 resource conflicts, and prioritization by adaptation, it may be possible that an audio stream 
       
  1255 is played, but not the vibra that accompanies that audio. For instance, if audio is mixed and 
       
  1256 two audio streams are rendered, vibra playback might not be mixed. Vibra playback may be 
       
  1257 prioritized by adaptation to a single controller. The behavior in these cases would be based 
       
  1258 on adaptation implementation. The user is not notified if vibra is not played.
       
  1259 */
       
  1260 class MAudioVibraControl 
       
  1261 	{
       
  1262 public:
       
  1263 	/** 
       
  1264 	Turns vibra on.
       
  1265 
       
  1266 	@return	KErrNone if successful KErrNotSupported if this method is not implemented.	
       
  1267 	*/
       
  1268 	virtual TInt StartVibra() = 0;
       
  1269 	
       
  1270 	/** 
       
  1271 	Turns vibra off.
       
  1272 	
       
  1273 	@return	KErrNone if successful. KErrNotSupported if this method is not implemented.	
       
  1274 	*/
       
  1275 	virtual TInt StopVibra() = 0;
       
  1276 	};
       
  1277 
       
  1278 /*****************************************************************************/
       
  1279 /**
       
  1280 UID associated with the Custom interface MMMFSampleBuffering
       
  1281 */
       
  1282 const TUid KUidSampleBuffering = {0x10282609};
       
  1283 
       
  1284 /**
       
  1285 Custom interface class to allow DevSound to support buffering of samples before playback begins. 
       
  1286 This allows playback to be more robust to underflow errors when playback begins at the expense 
       
  1287 of higher latency before playback starts.
       
  1288 */
       
  1289 class MMMFSampleBuffering
       
  1290 	{
       
  1291 public:
       
  1292 	/**
       
  1293 	Enables buffering up of samples before playback begins. This function is only effective before 
       
  1294 	CMMFDevSound::PlayInit() is called - calling the function after this will have no effect.
       
  1295 	@return  "This method may return one of the system-wide error codes."
       
  1296 	*/
       
  1297 	virtual TInt MmsbEnableSampleBufferingBeforePlayback() = 0;
       
  1298 	
       
  1299 	/**
       
  1300 	Disables buffering up of samples before playback begins. This function is only effective before 
       
  1301 	CMMFDevSound::PlayInit() is called - calling the function after this will have no effect.
       
  1302 	@return  "This method may return one of the system-wide error codes."
       
  1303 	*/
       
  1304 	virtual TInt MmsbDisableSampleBufferingBeforePlayback() = 0;
       
  1305 
       
  1306 	/**
       
  1307 	Asynchronous request that completes when Playback actually starts.
       
  1308 	@param	"aStatus" "TRequestStatus that will be completed when play actually starts"
       
  1309 	*/
       
  1310 	virtual void MmsbNotifyPlayStarted(TRequestStatus& aStatus) = 0;
       
  1311 
       
  1312 	/**
       
  1313 	Cancel any outstanding asynchronous NotifyPlayStarted requests.
       
  1314 	*/
       
  1315 	virtual void MmsbCancelNotifyPlayStarted() = 0;
       
  1316 	};
       
  1317 
       
  1318 /*****************************************************************************/
       
  1319 /**
       
  1320 UID associated with the Custom interface MMMFPlaybackStatus.
       
  1321 */
       
  1322 const TUid KUidPlaybackStatus = {0x10273811};
       
  1323 
       
  1324 /**
       
  1325 Custom interface class to enable access to the DevSound implementation to report the number of 
       
  1326 consumed input bytes, number of successfully decoded samples, samples played, system time and
       
  1327 total samples played.
       
  1328 */	
       
  1329 class MMMFPlaybackStatus
       
  1330 	{
       
  1331 public:
       
  1332 	/**  Play back status information */
       
  1333 	struct TMMFPlaybackStatus
       
  1334 		{
       
  1335 		/** Number of consumed input bytes */
       
  1336 		TInt64	aInputBytes;	
       
  1337 		/** Number of successfully decoded samples */
       
  1338 		TInt64	aDecodedSamples;		 
       
  1339 		/** Number of decoded samples played */
       
  1340 		TInt64	aDecodedSamplesPlayed;	
       
  1341 		/** Current system time */
       
  1342 		TInt64	aSystemTime;
       
  1343 		/**  Total samples played */
       
  1344 		TInt64 aTotalSamplesPlayed;
       
  1345 		};
       
  1346 	/**
       
  1347 	A method to query for detailed status information from a playing DevSound.
       
  1348 	including timestamp information from the DSP.
       
  1349 	@param  aStatus the current playback status.
       
  1350 	@return  "This method may return one of the system-wide error codes."
       
  1351 	*/
       
  1352 	virtual TInt MmpsGetPlaybackStatusInformation(TMMFPlaybackStatus& aStatus)= 0;
       
  1353 
       
  1354 	/**
       
  1355 	Request notification of loss of sync during decode - the notification will be received 
       
  1356 	in the DevSound client callback SendEventToClient with the	event type set to KMMFEventLossOfDecodeSync. 
       
  1357 	
       
  1358 	@return  "This method may return one of the system-wide error codes."
       
  1359 	*/
       
  1360 	virtual TInt MmpsRequestLossOfSyncNotification() = 0;
       
  1361 	
       
  1362 	/**
       
  1363 	Cancel the request for notification of loss of sync.
       
  1364 	
       
  1365 	@return  "This method may return one of the system-wide error codes."
       
  1366 	*/
       
  1367 	virtual TInt MmpsCancelLossOfSyncNotification() = 0;
       
  1368 	};
       
  1369 
       
  1370 /*****************************************************************************/
       
  1371 /**
       
  1372 UID associated with the Custom interface MMMFDSPControl
       
  1373 */
       
  1374 const TUid KUidDSPControl = {0x1028260A};
       
  1375 
       
  1376 /**
       
  1377 Custom interface class to allow control of DSP behaviour.
       
  1378 */		
       
  1379 class MMMFDSPControl
       
  1380 	{
       
  1381 public:
       
  1382 	
       
  1383 	/**
       
  1384 	Get the timestamp information from the DSP
       
  1385 	
       
  1386 	@param aSamplesPlayed - number of audio samples played so far.
       
  1387 	@param aSystemTime - current system time 
       
  1388 	@param aB - bytes consumed by the decoder
       
  1389 	@param aT - bytes successfully decoded by the decoder.
       
  1390 
       
  1391 	@return  "This method may return one of the system-wide error codes."
       
  1392 	*/
       
  1393 	virtual TInt MmdspcGetAudioPlaybackInfo(TInt64& aSamplesPlayed, TInt64& aSystemTime, TUint& aB, TUint& aT) = 0;
       
  1394 
       
  1395 	/**
       
  1396 	Place DevSound in a mode where overflow/underflow errors on recording are ignored.
       
  1397 	@return "This method may return one of the system-wide error codes."
       
  1398 	*/
       
  1399 	virtual TInt MmdspcAcceptRecordBuffersInvalidFollowingStop() = 0;
       
  1400 
       
  1401 	/**
       
  1402 	Place DevSound in a mode where overflow/underflow errors on playing are ignored.
       
  1403 	@return "This method may return one of the system-wide error codes."
       
  1404 	*/
       
  1405 	virtual TInt MmdspcAcceptPlaybackBuffersInvalidFollowingStop() = 0;
       
  1406 	};
       
  1407 	
       
  1408 /*****************************************************************************/
       
  1409 /**
       
  1410 UID associated with the Custom interface MMMFUnderflowAutoStopControl
       
  1411 */
       
  1412 const TUid KUidUnderflowAutoStopControl = {0x1028260B};
       
  1413 
       
  1414 /**
       
  1415 Custom interface class to control underflow behaviour.
       
  1416 */	
       
  1417 class MMMFUnderflowAutoStopControl
       
  1418 	{	
       
  1419 public:
       
  1420 	/**
       
  1421 	Turn off the default DevSound behaviour of automatically Stopping when an underflow 
       
  1422 	occurs. The underflow will be reported but play can continue when the client sends 
       
  1423 	more data - it is up to the client to call stop even in the case of end of file.
       
  1424 	
       
  1425 	@return  "This method may return one of the system-wide error codes."
       
  1426 	*/
       
  1427 	virtual TInt MmuascTurnOffUnderflowAutoStop() = 0;
       
  1428 	};
       
  1429 
       
  1430 /*****************************************************************************/
       
  1431 /**
       
  1432 UID associated with the Custom interface MMMFSetDRMProtected
       
  1433 */
       
  1434 const TUid KUidSetDRMProtected = {0x1028260C};
       
  1435 
       
  1436 /**
       
  1437 This class provides an interface to mark data being played as DRM protected.
       
  1438 */	
       
  1439 class MMMFSetDRMProtected
       
  1440 	{
       
  1441 public:
       
  1442 	/**
       
  1443 	Indicate whether the data being played is DRM protected or not
       
  1444 	 
       
  1445 	@param  aDRMProtected the required DRM state.
       
  1446 	@return  "This method may return one of the system-wide error codes."
       
  1447 	*/
       
  1448 	virtual TInt MmsdpMarkDataAsDRMProtected(TBool aDRMProtected) = 0;
       
  1449 	};
       
  1450 
       
  1451 /*****************************************************************************/
       
  1452 /**
       
  1453 UID associated with the Custom interface MMMFBufferFramesConfig.
       
  1454 */
       
  1455 const TUid KUidBufferFramesConfig = {0x1028260D};
       
  1456 
       
  1457 /**
       
  1458 This class provides an interface to configure and retrive the buffer frames.
       
  1459 */		
       
  1460 class MMMFBufferFramesConfig
       
  1461 	{
       
  1462 public:
       
  1463 	/**
       
  1464 	For use when encoding to set the number of encoded frames contained in each buffer 
       
  1465 	sent back to the client. The method should be called after CMMFDevSound::InitilaizeL 
       
  1466 	but before RecordInitL.
       
  1467 
       
  1468 	@param aFrameCount - Number of frames per buffer 
       
  1469 	@param aSamplesPerFrame - numer of samples per frame
       
  1470 	@return  "This method may return one of the system-wide error codes."
       
  1471 	*/
       
  1472 	virtual TInt MmbfcSetNumberOfFramesPerInputBuffer(TInt aFrameCount, TInt aSamplesPerFrame)=0;
       
  1473 	
       
  1474 	/**
       
  1475 	For use when decoding to set the number of encoded frames contained in each buffer sent 
       
  1476 	down to DevsSund for playback. The method should be called after CMMFDevSound::InitilaizeL 
       
  1477 	but before PlayInitL.
       
  1478 
       
  1479 	@param aFrameCount - Number of frames per buffer 
       
  1480 	@param aSamplesPerFrame - numer of samples per frame
       
  1481 	
       
  1482 	@return  "This method may return one of the system-wide error codes."
       
  1483 	*/
       
  1484 	virtual TInt MmbfcSetNumberOfFramesPerOutputBuffer(TInt aFrameCount, TInt aSamplesPerFrame)=0;
       
  1485 	};
       
  1486 
       
  1487 /*****************************************************************************/
       
  1488 /**
       
  1489 UID associated with the Custom interface MMMFGetTimestamps
       
  1490 */
       
  1491 const TUid KUidGetTimestamps = {0x1028260E};
       
  1492 
       
  1493 /**
       
  1494 This class provides an interface to configure and retrive time stamps.
       
  1495 */	
       
  1496 class MMMFGetTimestamps
       
  1497 	{
       
  1498 public:
       
  1499 	/**
       
  1500 	Enable or disable support for system timestamps during recording, used for Audio / Video sync. 
       
  1501 	This method can only be called after recording has been initialised, but before recording 
       
  1502 	has started. Once recording is underway, the setting cannot be changed.
       
  1503 
       
  1504 	@param aEnable ETrue to enable recording timestamps, EFalse to disable it.
       
  1505 
       
  1506 	@return KErrNotReady if DevSound has not yet been initialised, KErrNotSupported if 
       
  1507 	DevSound is not in recording mode or KErrInUse if recording is already underway.
       
  1508 	*/
       
  1509 	virtual TInt MmgtSetRecordSystemTimestampsEnabled(TBool aEnable) = 0;
       
  1510 
       
  1511 	/**
       
  1512 	This method returns the system timestamp corresponding to the CMMFDataBuffer with the 
       
  1513 	given position within the recording stream. This timestamp is the system time at which 
       
  1514 	the buffers timestamp, as returned by CMMFBuffer::TimeToPlay, was valid.
       
  1515 	This method can only be used if the recording timestamps were enabled before recording 
       
  1516 	started using the SetRecordSystemTimestampsEnabled method.
       
  1517 
       
  1518 	@param aBufferPosition The timestamp from the buffer, as returned by CMMFBuffer::TimeToPlay.
       
  1519 	@param aTimestamp Returns the corresponding system time, in universal time.
       
  1520 
       
  1521 	@return A System error code. 
       
  1522 			KErrNotSupported if recording is not ongoing; 
       
  1523 			KErrNotReady if DevSound is not initialized, or TimeStamps have not been enabled; 
       
  1524 			KErrNotFound if the timestamp given does not correspond to a recent record buffer.
       
  1525 	*/
       
  1526 	virtual TInt MmgtGetSystemTimestampForBuffer(const TTimeIntervalMicroSeconds& aBufferPosition, 
       
  1527 	                                                   TTime& aTimestamp) const = 0;
       
  1528 	};
       
  1529 
       
  1530 /*****************************************************************************/
       
  1531 /**
       
  1532 UID associated with the Custom interface MMMFAdvancedAACEncodeSettings
       
  1533 */
       
  1534 const TUid KUidAdvancedAACEncoderSettings = {0x102825FE};
       
  1535 
       
  1536 /**
       
  1537 Advanced AAC Encode Bit-rate Configuration
       
  1538 */
       
  1539 class MMMFAdvancedAACEncodeSettings
       
  1540 	{
       
  1541 public:
       
  1542 	/** AAC BItrate mode */
       
  1543 	enum TAACBitrateMode
       
  1544 		{
       
  1545 		/** AACBitrateModeNone */
       
  1546 		EAACBitrateModeNone,
       
  1547 		/** AACBitrateModeAbsolute */
       
  1548 		EAACBitrateModeAbsolute,
       
  1549 		/** AACBitrateModeVariable */
       
  1550 		EAACBitrateModeVariable,
       
  1551 		/** AACBitrateModeFixed */
       
  1552 		EAACBitrateModeFixed
       
  1553 		};
       
  1554 	/**
       
  1555 	SetAACEncodeBitrateMode
       
  1556 
       
  1557 	Set the bitrate mode for AAC encoding. This must be called before the encoding starts.
       
  1558 
       
  1559 	@param aBitrateMode the structure containing the additional information required for decoding the raw AAC.
       
  1560 	@return KErrNone if successful. KErrInUse if this method is used when decoding is active. 
       
  1561 	*/
       
  1562 	virtual TInt SetAACEncodeBitrateMode(TAACBitrateMode aBitrateMode)=0;
       
  1563 
       
  1564 	/**
       
  1565 	This interface returns the current AACEncoding bitrate mode.
       
  1566 
       
  1567 	@param  aBitrateMode the structure containing the additional information.
       
  1568 	@return  KErrNone if successful. KErrNotSupported if this method is not implemented.
       
  1569 	*/
       
  1570 	virtual TInt GetAACEncodeBitrateMode(TAACBitrateMode& aBitrateMode) = 0;
       
  1571 	};
       
  1572 	
       
  1573 /*****************************************************************************/
       
  1574 
       
  1575 	
       
  1576 #endif 
       
  1577