os/mm/devsound/devsoundapi/inc/DevSoundStandardCustomInterfaces.h
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     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