mmlibs/mmfw/inc/MdaAudioOutputStream.h
author hgs
Tue, 02 Nov 2010 12:13:59 +0000
changeset 5 b220a9341636
parent 0 b8ed18f6c07b
permissions -rw-r--r--
2010wk46_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     1
// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     2
// All rights reserved.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     7
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     8
// Initial Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    10
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    11
// Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    12
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    13
// Description:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    14
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    15
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    16
#ifndef __MDAAUDIOOUTPUTSTREAM_H
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    17
#define __MDAAUDIOOUTPUTSTREAM_H
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    18
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    19
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    20
#include <e32std.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    21
#include <mmf/common/mmfbase.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    22
#include <mmf/common/mmfstandardcustomcommands.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    23
#include <mda/common/base.h>      
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    24
#include <mda/client/utility.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    25
#include <mmf/common/mmfaudio.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    26
#include <mmfclntutility.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    27
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    28
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    29
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    30
@publishedAll
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    31
@released
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    32
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    33
An interface class that notifies the client of the progress of audio output streaming.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    34
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    35
It must be implemented by users of the CMdaAudioOutputStream class.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    36
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    37
An object that implements this interface is passed to CMdaAudioOutputStream::NewL().
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    38
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    39
class MMdaAudioOutputStreamCallback 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    40
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    41
public:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    42
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    43
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    44
	A callback function that is called when CMdaAudioOutputStream::Open() has completed, indicating that the
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    45
	audio output stream is ready for use.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    46
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    47
	@param  aError
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    48
	        An error value which indicates if open was completed successfully. KErrNone if succeeded.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    49
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    50
	virtual void MaoscOpenComplete(TInt aError) = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    51
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    52
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    53
	A callback function that is called when a descriptor has been copied to the lower layers of MMF. 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    54
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    55
	It is also called when an error has occurred or when the client has stopped the stream playing before the descriptor 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    56
	has been fully copied (by calling CMdaAudioOutputStream::Stop()).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    57
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    58
	This function indicates to the client that it is safe to destroy the buffer passed to CMdaAudioOutputStream::WriteL(). 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    59
	It can also be used to make the next call to WriteL().
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    60
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    61
	@param  aError
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    62
	        KErrNone if the copy succeeded, otherwise one of the system error codes. KErrAbort indicates that 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    63
	        the client has stopped the stream playing before the descriptor has been copied.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    64
	@param  aBuffer
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    65
	        A reference to the buffer that has been copied.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    66
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    67
	virtual void MaoscBufferCopied(TInt aError, const TDesC8& aBuffer) = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    68
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    69
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    70
	A callback function that is called when playback terminates as a result of a CMdaAudioOutputStream::Stop().
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    71
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    72
	If the end of the sound data has been reached, the function returns KErrUnderFlow. If playback terminates for any 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    73
	other reason, the function returns an appropriate error value.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    74
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    75
	@param  aError
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    76
	        An error value which indicates play success or not. KErrNone if the close succeeded, otherwise one of the
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    77
	        system error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    78
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    79
	virtual void MaoscPlayComplete(TInt aError) = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    80
	};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    81
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    82
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    83
class CMMFMdaAudioOutputStream;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    84
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    85
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    86
@publishedAll
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    87
@released
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    88
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    89
The interface to an audio stream player passing raw audio data from specified buffers to the audio hardware.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    90
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    91
This class enables MMF clients to:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    92
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    93
Stream raw audio data to the audio hardware from specified buffers
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    94
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    95
Specify the priority of the audio stream in relation to other clients that may request to use the same audio hardware
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    96
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    97
Set the sample rate and the number of channels after successfully opening the stream. It is not possible to change these 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    98
values once  streaming has started.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    99
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   100
Change the volume and balance before or while the stream is open for writing. Volume and balance settings take effect immediately.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   101
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   102
The API supports callbacks from the server to notify the client:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   103
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   104
MaoscOpenComplete() will be called when the audio streaming object is open and ready to stream data back to the
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   105
audio hardware as a result of a previous call to Open().
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   106
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   107
MaoscBufferCopied() will be called each time audio data has been successfully copied to the lower layers of the
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   108
MMF as a result of a previous WriteL().
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   109
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   110
MaoscPlayComplete() will be called when the audio data stream has been closed as a result of a previous Stop().
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   111
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   112
class CMdaAudioOutputStream : public CBase,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   113
							  public MMMFClientUtility
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   114
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   115
public:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   116
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   117
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   118
	Allocates and constructs an audio stream player object.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   119
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   120
	@param  aCallBack
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   121
	        A callback to notify the client when the sound device is open and ready to receive data, when 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   122
	        each descriptor has been copied and when the stream is closed. The caller must create a 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   123
	        callback class which implements this interface.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   124
	@param  aServer
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   125
	        A pointer to a CMdaServer. CMdaServer is deprecated and as such this parameter is only provided 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   126
	        for backward compatibility.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   127
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   128
	@return A pointer to new audio stream player.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   129
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   130
	IMPORT_C static CMdaAudioOutputStream* NewL(MMdaAudioOutputStreamCallback& aCallBack,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   131
												CMdaServer* aServer = NULL);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   132
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   133
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   134
	Constructs and initialises a new instance of an audio streaming object.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   135
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   136
	The function leaves if the audio streaming object cannot be created.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   137
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   138
	@param  aCallBack
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   139
	        A callback to notify the client when the sound device is open and ready to receive data, when each
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   140
	        descriptor has been copied and when the stream is closed. The caller must create a callback class
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   141
	        which implements this interface.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   142
    @param  aPriority
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   143
            The Priority Value - this client's relative priority. This is a value between EMdaPriorityMin and 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   144
            EMdaPriorityMax and represents a relative priority. A higher value indicates a more important request.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   145
    @param  aPref
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   146
            The Priority Preference - an additional audio policy parameter. The suggested default is 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   147
            EMdaPriorityPreferenceNone. Further values are given by TMdaPriorityPreference, and additional 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   148
            values may be supported by given phones and/or platforms, but should not be depended upon by 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   149
            portable code.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   150
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   151
	@return A pointer to CMdaAudioOutputStream.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   152
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   153
    Note: The Priority Value and Priority Preference are used primarily when deciding what to do when
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   154
    several audio clients attempt to play or record simultaneously. In addition to the Priority Value and Preference, 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   155
    the adaptation may consider other parameters such as the SecureId and Capabilities of the client process. 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   156
    Whatever, the decision  as to what to do in such situations is up to the audio adaptation, and may
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   157
    vary between different phones. Portable applications are advised not to assume any specific behaviour. 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   158
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   159
	IMPORT_C static CMdaAudioOutputStream* NewL(MMdaAudioOutputStreamCallback& aCallBack,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   160
												TInt aPriority,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   161
												TInt aPref = EMdaPriorityPreferenceTimeAndQuality);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   162
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   163
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   164
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   165
    Destructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   166
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   167
	Frees all resources owned by the object prior to its destruction.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   168
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   169
	~CMdaAudioOutputStream();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   170
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   171
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   172
	Sets the sample rate and number of audio channels.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   173
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   174
	@param  aSampleRate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   175
	        The new sample rate. For possible values, see the TAudioCaps enum in class TMdaAudioDataSettings.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   176
	@param  aChannels
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   177
	        The new number of channels. For possible values, see the TAudioCaps enum in class TMdaAudioDataSettings.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   178
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   179
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   180
	virtual void SetAudioPropertiesL(TInt aSampleRate, TInt aChannels);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   181
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   182
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   183
	Opens an output audio stream package.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   184
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   185
	The MMdaAudioOutputStreamCallback::MaoscOpenComplete() callback function is called when the stream has been 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   186
	opened and is ready to receive audio data. If the open was unsuccessful, this is indicated by the aError 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   187
	parameter of the callback.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   188
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   189
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   190
	@param  aSettings
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   191
	        A pointer to a TMdaPackage object.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   192
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   193
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   194
	virtual void Open(TMdaPackage* aSettings);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   195
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   196
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   197
	Returns the maximum volume level.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   198
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   199
	@return The maximum volume level supported by the sound device, as an integer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   200
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   201
	virtual TInt MaxVolume();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   202
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   203
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   204
	Returns the current volume.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   205
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   206
	@return The current volume as an integer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   207
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   208
	virtual TInt Volume();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   209
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   210
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   211
	Sets the audio volume.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   212
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   213
	Set the volume to zero for "sound off" or any other value between 1 and MaxVolume().
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   214
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   215
	@param  aNewVolume
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   216
	        A specified audio volume.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   217
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   218
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   219
	virtual void SetVolume(const TInt aNewVolume);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   220
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   221
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   222
	Sets the audio priority values.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   223
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   224
	This function cannot be used while the stream object is open. It is intended for use before an Open() 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   225
	is issued, or between a previous Stop() and a new Open().
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   226
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   227
	@param  aPriority
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   228
	        The Priority Value.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   229
	@param  aPref
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   230
	        The Priority Preference.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   231
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   232
    @see CMdaAudioOutputStream::NewL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   233
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   234
	virtual void SetPriority(TInt aPriority, TInt aPref);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   235
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   236
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   237
	Writes (plays) streaming raw audio data.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   238
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   239
	This function is asynchronous. When aData has been received, the client is notified by a call to 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   240
	MMdaAudioOutputStreamCallback::MaoscBufferCopied(). The client can call WriteL() again before this notification 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   241
	takes place because the buffers are maintained in a client-side queue until they have been sent. An active object 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   242
	performs the notification, and copies the next item in the queue to the server.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   243
	MMdaAudioOutputStreamCallback::MaoscPlayComplete() is called when all descriptors have been sent.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   244
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   245
	@param  aData
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   246
	        A reference to the stream data.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   247
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   248
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   249
	virtual void WriteL(const TDesC8& aData);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   250
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   251
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   252
	Stops writing data to a stream.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   253
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   254
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   255
	virtual void Stop();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   256
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   257
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   258
	Pause data rendering by audio hardware.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   259
	@return  An error code indicating if the operation was successful. KErrNone on success, 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   260
		KErrNotReady if not streaming
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   261
		KErrNotSupported if trying to pause when resume is not supported by DevSound
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   262
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   263
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   264
	IMPORT_C TInt Pause();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   265
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   266
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   267
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   268
	Resume data rendering by audio hardware.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   269
	@return  An error code indicating if the operation was successful. KErrNone on success, 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   270
		KErrNotReady if not paused. 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   271
		KErrNotSupported if trying to resume when resume is not supported by DevSound
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   272
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   273
	IMPORT_C TInt Resume();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   274
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   275
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   276
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   277
	Returns the current position within the data stream.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   278
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   279
	@return The current position within the stream in microseconds.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   280
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   281
	virtual const TTimeIntervalMicroSeconds& Position();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   282
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   283
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   284
	Sets the audio balance.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   285
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   286
	@param  aBalance
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   287
	        A specified balance volume. Default is KMMFBalanceCenter.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   288
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   289
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   290
	IMPORT_C void SetBalanceL(TInt aBalance = KMMFBalanceCenter);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   291
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   292
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   293
	Returns the current balance as an integer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   294
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   295
	@return The current balance value as integer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   296
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   297
	IMPORT_C TInt GetBalanceL() const;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   298
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   299
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   300
	Returns the current number of bytes rendered by audio hardware.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   301
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   302
	@return The current current number of bytes rendered by audio hardware as an integer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   303
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   304
	IMPORT_C TInt GetBytes();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   305
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   306
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   307
    Sets the data type.  If the data type is not explicitly set it will assumed to be pcm16.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   308
    If it is set then the hardware must support the data type being set otherwise the 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   309
    function leaves with KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   310
    
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   311
    @param	aAudioType The fourCC code used to specify the data type of the streamed audio
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   312
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   313
	@leave KErrNotSupported
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   314
	       Leaves with this for any unsuported data type.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   315
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   316
    IMPORT_C void SetDataTypeL(TFourCC aAudioType);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   317
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   318
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   319
	Returns the current data type.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   320
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   321
	@return The ID of the data type.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   322
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   323
	IMPORT_C TFourCC DataType() const;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   324
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   325
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   326
	Registers the Event for Notification when resource is avaliable.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   327
	@param	aCallback
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   328
	      	The audio outputstream observer interface..
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   329
	@param 	aNotificationEventUid
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   330
	 	The Event for which the client is registered.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   331
	@param 	aNotificationRegistrationData
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   332
		Notification registration specific data.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   333
	@return An error code indicating if the registration was successful. KErrNone on success, 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   334
		otherwise another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   335
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   336
	IMPORT_C TInt RegisterAudioResourceNotification(MMMFAudioResourceNotificationCallback& aCallback,TUid aNotificationEventUid,const TDesC8& aNotificationRegistrationData = KNullDesC8);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   337
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   338
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   339
	Cancels the registered notification event.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   340
	@param  aNotificationEventUid
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   341
		The Event to notify the client.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   342
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   343
	@return An error code indicating if the registration was successful. KErrNone on success, 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   344
		otherwise another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   345
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   346
	IMPORT_C TInt CancelRegisterAudioResourceNotification(TUid aNotificationEventId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   347
    
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   348
    	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   349
	Waits for the client to resume the play even after the default timer expires.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   350
	@return An error code indicating if the registration was successful. KErrNone on success, 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   351
		otherwise another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   352
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   353
	IMPORT_C TInt WillResumePlay();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   354
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   355
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   356
	Retrieves a custom interface to the underlying device.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   357
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   358
	@param  aInterfaceId
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   359
	        The interface UID, defined with the custom interface.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   360
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   361
	@return A pointer to the interface implementation, or NULL if the device does not
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   362
	        implement the interface requested. The return value must be cast to the
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   363
	        correct type by the user.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   364
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   365
	IMPORT_C TAny* CustomInterface(TUid aInterfaceId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   366
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   367
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   368
	When this method is called, AudioOutputStream goes into a different mode wherein it does not call 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   369
	MaoscPlayComplete() with KErrUnderflow when all the supplied data has been played. Instead client 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   370
	should signal the end of the play by calling RequestStop() or Stop() on AudioOutputStream.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   371
	If the client calls RequestStop(), AudioOutputStream waits until all the queued data has been played out
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   372
	and then calls MaoscPlayComplete(). This behaviour is different from that of Stop(), which stops the play
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   373
	immediately by discarding all the queued data.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   374
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   375
	Client should call this method on CMdaAudioOutputStream just after its construction and its 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   376
	effect remains through out its lifetime.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   377
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   378
	Note: This feature is supported only on a DevSound which ignores the underflow errors in the middle of
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   379
	the play i.e which returns ETrue from QueryIgnoresUnderflow().
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   380
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   381
	@return KErrNone on success, 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   382
			KErrNotSupported if the underlying DevSound does not ignore the underflow errors in the middle of the play
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   383
				
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   384
	@see CMdaAudioOutputStream::RequestStop()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   385
	@see CMMFDevSound::QueryIgnoresUnderflow()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   386
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   387
	IMPORT_C TInt KeepOpenAtEnd();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   388
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   389
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   390
	This method signals the end of play when the AudioOutputStream is in KeepOpenAtEnd mode i.e when client
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   391
	makes KeepOpenAtEnd call on it. When RequestStop is called, AudioOutputStream completes playing all
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   392
	the data that is supplied to it and calls MaoscPlayComplete() with KErrUnderflow.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   393
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   394
	Note: Before calling this method, client must have already called KeepOpenAtEnd() successfully, Otherwise, this
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   395
		  method returns KErrNotSupported. 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   396
		  It is recommended to use KeepOpenAtEnd and RequestStop calls to get a predictable behaviour during stopping.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   397
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   398
	@return KErrNone on success
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   399
			KErrNotSupported when this method is called without calling KeepOpenAtEnd
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   400
			KErrNotReady when this method is called before completing previous RequestStop or AudioOutputStream
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   401
			is already in the stopped state
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   402
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   403
	@see CMdaAudioOutputStream::KeepOpenAtEnd()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   404
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   405
	IMPORT_C TInt RequestStop();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   406
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   407
private:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   408
	CMdaAudioOutputStream();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   409
private:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   410
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   411
	This member is internal and not intended for use.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   412
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   413
	CMMFMdaAudioOutputStream* iProperties;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   414
	};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   415
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   416
#endif