os/mm/devsound/a3fdevsound/src/mmfdevsound/sounddevice.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 // Copyright (c) 2006-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 
    18 //  INCLUDES
    19 #include <mmf/server/sounddevice.h>
    20 #include "sounddevicebody.h"
    21 
    22 /*
    23  *  Default Constructor.
    24  */
    25 CMMFDevSound::CMMFDevSound()
    26 	{
    27 	}
    28 
    29 /*
    30  *  Destructor.
    31  */
    32 EXPORT_C CMMFDevSound::~CMMFDevSound()
    33 	{
    34 	delete iBody;
    35 	}
    36 
    37 /*
    38  *  CMMFDevSound::NewL
    39  *
    40  *  Constructs and returns a pointer to a new CMMFDevSound object.
    41  */
    42 EXPORT_C CMMFDevSound* CMMFDevSound::NewL()
    43 	{
    44 	CMMFDevSound* self = new (ELeave) CMMFDevSound;
    45 	CleanupStack::PushL(self);
    46 	self->ConstructL();
    47 	CleanupStack::Pop(self);
    48 	return self;
    49 	}
    50 
    51 /*
    52  *  CMMFDevSound::ConstructL
    53  *
    54  *  Second phase constructor.
    55  */
    56 void CMMFDevSound::ConstructL()
    57 	{
    58 	iBody = CBody::NewL();
    59 	}
    60 
    61 /*
    62  *  CMMFDevSound::InitializeL
    63  *
    64  *  Initializes CMMFDevSound object. On completion of Initialization will
    65  *  call InitializeComplete() on aDevSoundObserver.
    66  *
    67  *  @param  aDevSoundObserver. A reference to the DevSound Observer instance.
    68  *  @param  aMode. A mode for which this object will be used.
    69  */
    70 EXPORT_C void CMMFDevSound::InitializeL(MDevSoundObserver& aDevSoundObserver,TMMFState aMode)
    71 
    72 	{
    73 	iBody->InitializeL(aDevSoundObserver,aMode);
    74 	}
    75 
    76 /*
    77  *  CMMFDevSound::InitializeL
    78  *
    79  *  Initializes CMMFDevSound object with hardware device aHWDev. On completion
    80  *  of Initialization will call InitializeComplete() on aDevSoundObserver.
    81  *
    82  *	Method is deprecated from OS release 9.5
    83  *
    84  *  @param  aDevSoundObserver. A reference to the DevSound Observer instance.
    85  *  @param  aHWDev. CMMFHwDevice implementation identifier.
    86  *  @param  aMode. A mode for which this object will be used.
    87  */
    88 EXPORT_C void CMMFDevSound::InitializeL(
    89 							MDevSoundObserver& /*aDevSoundObserver*/,
    90 							TUid /*aHWDev*/,
    91 							TMMFState /*aMode*/)
    92 	{
    93 	User::Leave(KErrNotSupported);
    94 	}
    95 
    96 /*
    97  *  CMMFDevSound::InitializeL
    98  *
    99  *  Initializes CMMFDevSound object with hardware device with hardware
   100  *  device's FourCC code. On completion of Initialization will call
   101  *  InitializeComplete() on aDevSoundObserver.
   102  *
   103  *  @param  aDevSoundObserver. A reference to the DevSound Observer instance.
   104  *  @param  aDesiredFourCC. CMMFHwDevice implementation FourCC.
   105  *  @param  aMode. A mode for which this object will be used.
   106  */
   107 EXPORT_C void CMMFDevSound::InitializeL(
   108 							MDevSoundObserver& aDevSoundObserver,
   109 							TFourCC aDesiredFourCC,
   110 							TMMFState aMode)
   111 	{
   112 	iBody->InitializeL(aDevSoundObserver, aDesiredFourCC, aMode);
   113 	}
   114 
   115 /*
   116  *  CMMFDevSound::Capabilities
   117  *
   118  *  Returns supported Audio settings.
   119  *
   120  *  @return TMMFCapabilities device settings.
   121  */
   122 EXPORT_C TMMFCapabilities CMMFDevSound::Capabilities()
   123 	{
   124 	return iBody->Capabilities();
   125 	}
   126 
   127 /*
   128  *  CMMFDevSound::Config
   129  *
   130  *  Returns current audio settings.
   131  *
   132  *  @return TMMFCapabilities device settings.
   133  */
   134 EXPORT_C TMMFCapabilities CMMFDevSound::Config() const
   135 	{
   136 	return iBody->Config();
   137 	}
   138 
   139 /*
   140  *  CMMFDevSound::SetConfigL
   141  *
   142  *  ConfigureS CMMFDevSound object with the settings in aConfig.
   143  *
   144  *  Use this to set sampling rate, Encoding and Mono/Stereo.
   145  *
   146  *  @param  aConfig. CMMFDevSound configuration settings.
   147  */
   148 EXPORT_C void CMMFDevSound::SetConfigL(const TMMFCapabilities& aConfig)
   149 	{
   150 	iBody->SetConfigL(aConfig);
   151 	}
   152 
   153 /*
   154  *  CMMFDevSound::MaxVolume
   155  *
   156  *  Returns an integer representing the maximum volume.
   157  *
   158  *  This is the maximum volume which can be passed to CMMFDevSound::SetVolume.
   159  *
   160  *  @return TInt
   161  *          The maximum volume. This value is platform dependent but is always
   162  *          greater than or equal to one.
   163  */
   164 EXPORT_C TInt CMMFDevSound::MaxVolume()
   165 	{
   166 	return iBody->MaxVolume();
   167 	}
   168 
   169 /*
   170  *  CMMFDevSound::Volume
   171  *
   172  *  Returns an integer representing current volume level.
   173  *
   174  *  @return TInt
   175  *          Current volume level.
   176  */
   177 EXPORT_C TInt CMMFDevSound::Volume()
   178 	{
   179 	return iBody->Volume();
   180 	}
   181 
   182 /*
   183  *  CMMFDevSound::SetVolume
   184  *
   185  *  Changes current volume level to the specified value.
   186  *
   187  *  The volume can be changed before or during playback and is effective
   188  *  immediately.
   189  *
   190  *  @param  TInt
   191  *          The volume setting. This can be any value between zero and the
   192  *          value returned by the call to CMMFDevSound::MaxVolume(). If the
   193  *          volume is out of range, it is automatically set to the minimum or
   194  *          maximum level closest to the value being passed in. Setting a zero
   195  *          value mutes the sound.
   196  */
   197 EXPORT_C void CMMFDevSound::SetVolume(TInt aVolume)
   198 	{
   199 	iBody->SetVolume(aVolume);
   200 	}
   201 
   202 /*
   203  *  CMMFDevSound::MaxGain
   204  *
   205  *  Returns an integer representing the maximum microphone gain.
   206  *
   207  *  This is the maximum value which can be passed to CMMFDevSound::SetGain.
   208  *
   209  *  @return TInt
   210  *          The maximum gain. This value is platform dependent but is always
   211  *          greater than or equal to one.
   212  */
   213 EXPORT_C TInt CMMFDevSound::MaxGain()
   214 	{
   215 	return iBody->MaxGain();
   216 	}
   217 
   218 /*
   219  *  CMMFDevSound::Gain
   220  *
   221  *  Returns an integer representing current gain.
   222  *
   223  *  @return TInt
   224  *          The current gain level.
   225  */
   226 EXPORT_C TInt CMMFDevSound::Gain()
   227 	{
   228 	return iBody->Gain();
   229 	}
   230 
   231 /*
   232  *  CMMFDevSound::SetGain
   233  *
   234  *  Changes current recording gain to a specified value.
   235  *
   236  *  The gain can be changed before or during recording and is effective
   237  *  immediately.
   238  *
   239  *  @param  aGain. This can be any value between zero and the
   240  *          value returned by the call to CMMFDevSound::MaxGain(). If the
   241  *          gain is out of range, it is automatically set to minimum or maximum
   242  *          value closest to the value that is being passed.
   243  *          Setting a zero value mutes the microphone.
   244  */
   245 EXPORT_C void CMMFDevSound::SetGain(TInt aGain)
   246 	{
   247 	iBody->SetGain(aGain);
   248 	}
   249 
   250 /*
   251  *  CMMFDevSound::GetPlayBalanceL
   252  *
   253  *  Returns the speaker balance set for playing.
   254  *
   255  *  @param  aLeftPercentage. On return contains the left speaker volume percentage.
   256  *  @param  aRightPercentage. On return contains the left speaker volume percentage.
   257  */
   258 EXPORT_C void CMMFDevSound::GetPlayBalanceL(TInt& aLeftPercentage,TInt& aRightPercentage)
   259 	{
   260 	iBody->GetPlayBalanceL(aLeftPercentage, aRightPercentage);
   261 	}
   262 
   263 /*
   264  *  CMMFDevSound::SetPlayBalanceL
   265  *
   266  *  Sets the speaker balance for playing.
   267  *
   268  *  The speaker balance can be changed before or during playback and is
   269  *  effective immediately.
   270  *
   271  *  @param  aLeftPercentage. Left speaker volume perecentage. This can be any value between
   272  *          zero and 100. Setting a zero value mutes the sound on the left
   273  *          speaker.
   274  *  @param  aRightPercentage. Right speaker volume perecentage. This can be any value between
   275  *          zero and 100. Setting a zero value mutes the sound on the right
   276  *          speaker.
   277  */
   278 EXPORT_C void CMMFDevSound::SetPlayBalanceL(TInt aLeftPercentage, TInt aRightPercentage)
   279 	{
   280 	iBody->SetPlayBalanceL(aLeftPercentage, aRightPercentage);
   281 	}
   282 
   283 /*
   284  *  CMMFDevSound::GetRecordBalanceL
   285  *
   286  *  Returns the microphone gain balance set for recording.
   287  *
   288  *  @param  aLeftPercentage. On return contains the left microphone gain percentage.
   289  *  @param  aRightPercentage. On return contains the right microphone gain percentage.
   290  */
   291 EXPORT_C void CMMFDevSound::GetRecordBalanceL(TInt& aLeftPercentage, TInt& aRightPercentage)
   292 	{
   293 	iBody->GetRecordBalanceL(aLeftPercentage, aRightPercentage);
   294 	}
   295 
   296 /*
   297  *  CMMFDevSound::SetRecordBalanceL
   298  *
   299  *  Sets the microphone gain balance for recording.
   300  *
   301  *  The microphone gain balance can be changed before or during recording and
   302  *  is effective immediately.
   303  *
   304  *  @param  aLeftPercentage. Left microphone gain precentage. This can be any value between zero
   305  *          and 100. Setting a zero value mutes the gain on the left microphone.
   306  *  @param  aRightPercentage. Right microphone gain precentage. This can be any value between zero
   307  *          and 100. Setting a zero value mutes the gain on the right microphone
   308  */
   309 EXPORT_C void CMMFDevSound::SetRecordBalanceL(TInt aLeftPercentage,TInt aRightPercentage)
   310 	{
   311 	iBody->SetRecordBalanceL(aLeftPercentage, aRightPercentage);
   312 	}
   313 
   314 /*
   315  *  CMMFDevSound::PlayInitL
   316  *
   317  *  Initializes audio device and starts the playback. Before playback can be
   318  *  started, its current client's access priority is first verified by the
   319  *  audio policy. In case of an error during the policy initialization, the
   320  *  PlayError() method will be called on the observer with KErrAccessDenied
   321  *  error code, otherwise BufferToBeFilled() method will be called with a
   322  *  buffer reference. After filling the buffer with the data, the client
   323  *  should call PlayData() to start playback.
   324  *
   325  *  The amount of data that can be played is specified in
   326  *  CMMFBuffer::RequestSize(). Any data that is read into the buffer beyond
   327  *  this size will be ignored.
   328  *
   329  */
   330 EXPORT_C void CMMFDevSound::PlayInitL()
   331 	{
   332 	iBody->PlayInitL();
   333 	}
   334 
   335 /*
   336  *  CMMFDevSound::RecordInitL
   337  *
   338  *  Initializes audio device and starts the recording. Before recording can be
   339  *  started, its current client's access priority is first verified by the
   340  *  audio policy. In case of an error during the policy initialization, the
   341  *  RecordError() method will be called on the observer with KErrAccessDenied
   342  *  error code, otherwise BufferToBeEmptied() method will be called with a
   343  *  buffer reference. This buffer contains recorded or encoded data. After
   344  *  processing the data in the buffer, the client should call RecordData()
   345  *  to continue recording process.
   346  *
   347  *  The amount of data that is available is specified in
   348  *  CMMFBuffer::RequestSize().
   349  *
   350  */
   351 EXPORT_C void CMMFDevSound::RecordInitL()
   352 	{
   353 	iBody->RecordInitL();
   354 	}
   355 
   356 /*
   357  *  CMMFDevSound::PlayData
   358  *
   359  *  Plays data in the buffer. The client should fill the buffer with a stream
   360  *  of sampled audio data before calling this method. The observer gets the
   361  *  reference to the buffer along with BufferToBeFilled() callback. When
   362  *  playing of the audio sample is complete, with success or not, the
   363  *  PlayError() method is called on the observer.
   364  */
   365 EXPORT_C void CMMFDevSound::PlayData()
   366 	{
   367 	iBody->PlayData();
   368 	}
   369 
   370 /*
   371  *  CMMFDevSound::RecordData
   372  *
   373  *  Records audio data. Once the buffer is filled with recorded sampled audio
   374  *  data, the observer gets reference to the buffer along with
   375  *  BufferToBeEmptied() callback. After processing of the buffer (copying over
   376  *  to a different buffer or writing to a file) the client should call this
   377  *  method again to continue recording process.
   378  */
   379 EXPORT_C void CMMFDevSound::RecordData()
   380 	{
   381 	iBody->RecordData();
   382 	}
   383 
   384 /*
   385  *  CMMFDevSound::Stop
   386  *
   387  *  Stops the ongoing operation (Play, Record, TonePlay)
   388  */
   389 EXPORT_C void CMMFDevSound::Stop()
   390 	{
   391 	iBody->Stop();
   392 	}
   393 
   394 /*
   395  *  CMMFDevSound::Pause
   396  *
   397  *  Temporarily suspends the ongoing operation (Play, Record, TonePlay)
   398  */
   399 EXPORT_C void CMMFDevSound::Pause()
   400 	{
   401 	iBody->Pause();
   402 	}
   403 
   404 /*
   405  *  CMMFDevSound::SamplesRecorded
   406  *
   407  *  Returns the number of recorded samples up to this point.
   408  *
   409  *  @return TInt
   410  *          Value representing recorded samples.
   411  */
   412 EXPORT_C TInt CMMFDevSound::SamplesRecorded()
   413 	{
   414 	return iBody->SamplesRecorded();
   415 	}
   416 
   417 /*
   418  *  CMMFDevSound::SamplesPlayed
   419  *
   420  *  Returns the number of played samples up to this point.
   421  *
   422  *  @return TInt
   423  *          Value representing played samples.
   424  */
   425 EXPORT_C TInt CMMFDevSound::SamplesPlayed()
   426 	{
   427 	return iBody->SamplesPlayed();
   428 	}
   429 
   430 /*
   431  *  CMMFDevSound::PlayToneL
   432  *
   433  *  Initializes audio device and starts playing a single tone according with
   434  *  the specified frequency and duration attributes.
   435  *
   436  *  @param  aFrequency. Frequency at with the tone will be played.
   437  *  @param  aDuration. The period over which the tone will be played. A zero value causes
   438  *          no tone to be played.
   439  */
   440 EXPORT_C void CMMFDevSound::PlayToneL(TInt aFrequency,const TTimeIntervalMicroSeconds& aDuration)
   441 	{
   442 	iBody->PlayToneL(aFrequency, aDuration);
   443 	}
   444 
   445 /*
   446  *  CMMFDevSound::PlayDualToneL
   447  *
   448  *  Initializes audio device and starts playing a dual tone.
   449  *  The tone consists of two sine waves of different frequencies summed
   450  *  together. Both frequencies and the duration are specified in the passed
   451  *  in attributes.
   452  *
   453  *  @param  aFrequencyOne. Value representing first frequency of the dual tone.
   454  *
   455  *  @param  aFrequencyTwo. Value representing second frequency of the dual tone.
   456  *
   457  *  @param  aDuration. The period over which the tone will be played. A zero value causes
   458  *          no tone to be played.
   459  */
   460 EXPORT_C void CMMFDevSound::PlayDualToneL(
   461 								TInt aFrequencyOne,
   462 								TInt aFrequencyTwo,
   463 								const TTimeIntervalMicroSeconds& aDuration)
   464 	{
   465 	iBody->PlayDualToneL(aFrequencyOne, aFrequencyTwo, aDuration);
   466 	}
   467 
   468 /*
   469  *  CMMFDevSound::PlayDTMFStringL
   470  *
   471  *  Initializes audio device and starts playing DTMF string.
   472  *
   473  *  @param  aDTMFString. DTMF sequence in a descriptor.
   474  */
   475 EXPORT_C void CMMFDevSound::PlayDTMFStringL(const TDesC& aDTMFString)
   476 	{
   477 	iBody->PlayDTMFStringL(aDTMFString);
   478 	}
   479 
   480 /*
   481  *  CMMFDevSound::PlayToneSequenceL
   482  *
   483  *  Initializes audio device and starts playing tone sequence.
   484  *
   485  *  @param  aData. Tone sequence in a descriptor.
   486  */
   487 EXPORT_C void CMMFDevSound::PlayToneSequenceL(const TDesC8& aData)
   488 	{
   489 	iBody->PlayToneSequenceL(aData);
   490 	}
   491 
   492 /*
   493  *  CMMFDevSound::PlayFixedSequenceL
   494  *
   495  *  Initializes audio device and starts playing the specified tone sequence.
   496  *
   497  *	Method is deprecated from OS release 9.5
   498  *
   499  *  @param  aSequenceNumber. The index identifying the specific pre-defined tone sequence. The
   500  *          index values are relative to zero. This can be any value between
   501  *          zero and the value returned by the call to
   502  *          CMdaAudioPlayerUtility::FixedSequenceCount() - 1. The function
   503  *          raises a panic if sequence number is out of range.
   504  */
   505 EXPORT_C void CMMFDevSound::PlayFixedSequenceL(TInt /*aSequenceNumber*/)
   506 	{
   507 	User::Leave(KErrNotSupported);
   508 	}
   509 
   510 /*
   511  *  CMMFDevSound::SetToneRepeats
   512  *
   513  *  Defines the number of times the audio is to be repeated during the tone
   514  *  playback operation.
   515  *
   516  *  A period of silence can follow each playing of tone. The tone playing can
   517  *  be repeated indefinitely.
   518  *
   519  *  @param  aRepeatCount. The number of times the tone, together with the trailing silence,
   520  *          is to be repeated. If this is set to KMdaRepeatForever, then the
   521  *          tone, together with the trailing silence, is repeated indefinitely
   522  *          or until Stop() is called. If this is set to zero, then the tone is
   523  *          not repeated.  Supported only during the tone playing.
   524 
   525  *  @param  aRepeatTrailingSilence. The duration of the trailing silence.
   526  */
   527 EXPORT_C void CMMFDevSound::SetToneRepeats(TInt aRepeatCount,const TTimeIntervalMicroSeconds& aRepeatTrailingSilence)
   528 	{
   529 	iBody->SetToneRepeats(aRepeatCount, aRepeatTrailingSilence);
   530 	}
   531 
   532 /*
   533  *  CMMFDevSound::SetDTMFLengths
   534  *
   535  *  Defines the duration of 'tone on/tone off' and 'tone pause' to be used
   536  *  during the DTMF playback.
   537  *
   538  *  Supported only during tone playing.
   539  *
   540  *  @param  aToneOnLength. The period over which the tone will be played. If this is set to
   541  *          zero, then the tone is not played.
   542  *
   543  *  @param  aToneOffLength. The period over which 'no tone' will be played.
   544  *
   545  *  @param  aPauseLength. The period over which the tone playing will be paused.
   546  */
   547 EXPORT_C void CMMFDevSound::SetDTMFLengths(
   548 									TTimeIntervalMicroSeconds32& aToneOnLength,
   549 									TTimeIntervalMicroSeconds32& aToneOffLength,
   550 									TTimeIntervalMicroSeconds32& aPauseLength)
   551 	{
   552 	iBody->SetDTMFLengths(aToneOnLength, aToneOffLength, aPauseLength);
   553 	}
   554 
   555 /*
   556  *  CMMFDevSound::SetVolumeRamp
   557  *
   558  *  Defines the period over which the volume level will rise smoothly from
   559  *  mute to the normal volume level.
   560  *
   561  *  @param  aRampDuration. The period over which the volume is to rise. A zero value causes
   562  *          the tone sample to be played at the normal level for the full duration of the 
   563  *          playback. A value, which is longer than the duration
   564  *          of the tone sample, will result in the sample never reaching its
   565  *          normal volume level.
   566  */
   567 EXPORT_C void CMMFDevSound::SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration)
   568 	{
   569 	iBody->SetVolumeRamp(aRampDuration);
   570 	}
   571 
   572 /*
   573  *  CMMFDevSound::SetPrioritySettings
   574  *
   575  *  Defines the priority settings that should be used for this instance.
   576  *
   577  *  @param  aPrioritySettings. A structure representing client's priority, priority
   578  *          preference and the state.
   579  */
   580 EXPORT_C void CMMFDevSound::SetPrioritySettings(const TMMFPrioritySettings& aPrioritySettings)
   581 	{
   582 	iBody->SetPrioritySettings(aPrioritySettings);
   583 	}
   584 
   585 /*
   586  *  CMMFDevSound::CustomInterface
   587  *
   588  *  Sends request to the DevSound Server to start custom interface specified
   589  *  by the TUid attribute.
   590  *
   591  *  @param  aInterface. Unique ID of the custom interface
   592  *
   593  *  @return TAny*
   594  *          Pointer to the custom interface object.
   595  */
   596 EXPORT_C TAny* CMMFDevSound::CustomInterface(TUid aInterface)
   597 	{
   598 	return iBody->CustomInterface(aInterface);
   599 	}
   600 
   601 /*
   602  *  CMMFDevSound::FixedSequenceCount
   603  *
   604  *  Returns the number of available pre-defined tone sequences.
   605  *
   606  *	Method is deprecated from OS release 9.5
   607  *
   608  *  This is the number of fixed sequence supported by the DevSound by default.
   609  *
   610  *  @return TInt
   611  *          The fixed sequence count. This value is implementation dependent
   612  *          but is always greater than or equal to zero.
   613  */
   614 EXPORT_C TInt CMMFDevSound::FixedSequenceCount()
   615 	{
   616 	return 0;
   617 	}
   618 
   619 /*
   620  *  CMMFDevSound::FixedSequenceName
   621  *
   622  *  Returns the name assigned to a specific pre-defined tone sequence.
   623  *
   624  *	Method is deprecated from OS release 9.5
   625  *
   626  *  @param  aSequenceNumber. The index identifying the specific pre-defined tone sequence.
   627  *          Index values are relative to zero. This can be any value between
   628  *          zero and the value returned by the call to
   629  *          CMdaAudioPlayerUtility::FixedSequenceCount() - 1. The function
   630  *          raises a panic if sequence number is out of range.
   631  *
   632  *  @return TDesC&
   633  *          A reference to a descriptor containing fixed sequence name
   634  *          indexed by aSequenceNumber.
   635  */
   636 EXPORT_C const TDesC& CMMFDevSound::FixedSequenceName(TInt /*aSequenceNumber*/)
   637 	{
   638 	return KNullDesC;
   639 	}
   640 
   641 /*
   642  *  CMMFDevSound::GetSupportedInputDataTypesL
   643  *
   644  *  Returns a list of supported input data types that can be sent to the
   645  *  DevSound for playing audio.
   646  *
   647  *  @param  aSupportedDataTypes. An array of supported data types.
   648  *  @param  aPrioritySettings. Structure containing priority settings.
   649  */
   650 EXPORT_C void CMMFDevSound::GetSupportedInputDataTypesL(RArray<TFourCC>& aSupportedDataTypes,const TMMFPrioritySettings& aPrioritySettings) const
   651 	{
   652 	iBody->GetSupportedInputDataTypesL(aSupportedDataTypes,
   653 									aPrioritySettings);
   654 	}
   655 
   656 /*
   657  *  CMMFDevSound::GetSupportedOutputDataTypesL
   658  *
   659  *  Returns a list of supported output data types that can be received from
   660  *  the DevSound for recording audio.
   661  *
   662  *  @param  aSupportedDataTypes. An array of supported data types.
   663  *  @param aPrioritySettings. Structure containing priority settings.
   664  */
   665 EXPORT_C void CMMFDevSound::GetSupportedOutputDataTypesL(RArray<TFourCC>& aSupportedDataTypes,const TMMFPrioritySettings& aPrioritySettings) const
   666 	{
   667 	iBody->GetSupportedOutputDataTypesL(aSupportedDataTypes,aPrioritySettings);
   668 	}
   669 
   670 /********************************************************************************
   671  *				Non Exported public functions ends here		*					
   672  ********************************************************************************/
   673 
   674 /******************************************************************************
   675  *	Function Name:	E32Dll
   676  *	
   677  *	Description:	Entry point for applications.
   678  *
   679  ******************************************************************************/
   680 
   681 enum TDllReason {};
   682 EXPORT_C TInt E32Dll(TDllReason /*aReason*/)
   683 	{
   684 	return KErrNone;
   685 	}
   686 
   687 // CMMFDevSoundEventHandler::NewL() has been declared in export table
   688 // but since it is the only class method to be so, and .h is in source
   689 // it is not actually usable. Just declare the following to keep linker happy
   690 
   691 // Need dummy abstract type - this is not the real class
   692 class RMMFAudioPolicyProxy;
   693 
   694 class CMMFDevSoundEventHandler : public CActive
   695 	{
   696 public:
   697 	IMPORT_C static CMMFDevSoundEventHandler* NewL(RMMFAudioPolicyProxy*);
   698 private:
   699 	CMMFDevSoundEventHandler();
   700 	};
   701 	
   702 EXPORT_C CMMFDevSoundEventHandler* CMMFDevSoundEventHandler::NewL(RMMFAudioPolicyProxy*)
   703 	{
   704 	_LIT(KModule, "DevSound");
   705 	User::Panic(KModule, 1000);
   706 	return NULL;
   707 	}
   708 
   709 // default constructor - keep compilers happy
   710 CMMFDevSoundEventHandler::CMMFDevSoundEventHandler():
   711 	CActive(EPriorityStandard)
   712 	{
   713 	}
   714 
   715 
   716 // End of File