mmdevicefw/mdf/src/audio/AudioDevice/audiodevice.h
author hgs
Fri, 08 Oct 2010 19:40:43 +0100
changeset 0 79dd3e2336a0
permissions -rw-r--r--
2010wk36_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     1
// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     2
// All rights reserved.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     7
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     8
// Initial Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    10
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    11
// Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    12
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    13
// Description:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    14
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    15
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    16
#ifndef AUDIODEVICE_H
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    17
#define AUDIODEVICE_H
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    18
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    19
#include <e32msgqueue.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    20
#include <mdf/mdfprocessingunit.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    21
#include <mdf/mdfinputport.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    22
#include <mdf/mdfoutputport.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    23
#include <mmf/server/mmfhwdevicesetup.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    24
#include <mdf/mdfcommon.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    25
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    26
#ifdef SYMBIAN_MDF_SHAREDCHUNK_SOUNDDRIVER
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    27
	#include "mdasoundadapter.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    28
#else
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    29
	#include <mdasound.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    30
#endif
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    31
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    32
class CMMFBuffer;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    33
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    34
/* 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    35
Audio Sink/Source processing unit
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    36
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    37
class CAudioDevice : public CMdfProcessingUnit			   
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    38
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    39
public:	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    40
	/* 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    41
	Audio Sink/Source input port
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    42
	*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    43
	class CInputPort: public CActive, 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    44
					  public MMdfInputPort, 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    45
					  public MPlayCustomInterface
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    46
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    47
	public:	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    48
		static CInputPort* NewL(CAudioDevice& aParent);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    49
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    50
		// from MMdfInputPort
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    51
		TInt MipConfigure(const TPuConfig&  aConfiguration);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    52
		TInt MipGetConfig(TPuConfig& aConfigurationSetup);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    53
		void MipInitialize();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    54
		void MipSetObserver(const MMdfInputPortObserver& aInputPortObserver);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    55
		CMMFBuffer* MipCreateBuffer(TInt aBufferSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    56
		TInt MipUseBuffer(CMMFBuffer& aBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    57
		TInt MipFreeBuffer(CMMFBuffer* aBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    58
		TInt MipTunnelRequest(const MMdfOutputPort& aOutputPortToBeConnectedTo,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    59
			TTunnelFlags& aTunnelFlags, TSupplierType& aSupplierType);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    60
		void MipWriteData(CMMFBuffer& aBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    61
		void MipDisconnectTunnel();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    62
		void MipRestartTunnel();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    63
		TBool MipIsTunnelled() const;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    64
		TInt MipIndex() const;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    65
		TUint32 MipBufferSize() const;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    66
		TInt MipCreateCustomInterface(TUid aUid);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    67
		TAny* MipCustomInterface(TUid aUid);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    68
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    69
		// from MPlayCustomInterface
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    70
		void SetVolume(TUint aVolume);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    71
		TUint Volume();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    72
		TUint BytesPlayed();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    73
		void SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    74
		TTimeIntervalMicroSeconds& VolumeRamp();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    75
		TInt SampleRate();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    76
		TInt Channels();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    77
				
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    78
		// from CActive
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    79
		void RunL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    80
		void DoCancel();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    81
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    82
		// CInputPort
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    83
		void Execute();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    84
		void Pause();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    85
		void Stop();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    86
		~CInputPort();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    87
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    88
	private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    89
		explicit CInputPort(CAudioDevice& aParent);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    90
		void ConstructL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    91
	private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    92
		CMMFBuffer* 			iCurrentBuffer;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    93
		CAudioDevice& 			iParent;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    94
		MMdfOutputPort*			iPortConnectedTo;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    95
		RPointerArray<CMMFBuffer> 	iBuffers;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    96
		MMdfInputPortObserver* 		iObserver;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    97
		TInt 					iSampleRate;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    98
		TInt 					iChannels;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    99
		TBool 				iInterleaved;	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   100
		TUint 				iVolume;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   101
		TTimeIntervalMicroSeconds 	iRampDuration;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   102
		TUint 				iBytesPlayed;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   103
		TBool 				iPaused;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   104
		TBool 				iStopped;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   105
		TUint 				iBufferSize;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   106
		};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   107
	/* 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   108
	Audio Sink/Source output port
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   109
	*/	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   110
	class COutputPort:  public CActive, 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   111
						public MMdfOutputPort,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   112
						public MRecordCustomInterface
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   113
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   114
	public:	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   115
		static COutputPort* NewL(CAudioDevice& aParent);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   116
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   117
		// from MMdfOutputPort
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   118
		TInt MopConfigure(const TPuConfig&  aConfiguration);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   119
		TInt MopGetConfig(TPuConfig& aConfigurationSetup);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   120
		void MopInitialize();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   121
		void MopSetObserver(const MMdfOutputPortObserver& aOutputPortObserver);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   122
		CMMFBuffer* MopCreateBuffer(TInt aBufferSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   123
		TInt MopUseBuffer(CMMFBuffer& aBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   124
		TInt MopFreeBuffer(CMMFBuffer* aBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   125
		TInt MopTunnelRequest(const MMdfInputPort& aInputPortToBeConnectedTo,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   126
			TTunnelFlags& aTunnelFlags, TSupplierType& aSupplierType);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   127
		void MopReadData(CMMFBuffer& aBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   128
		void MopDisconnectTunnel();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   129
		void MopRestartTunnel();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   130
		TBool MopIsTunnelled() const;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   131
		TInt MopIndex() const;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   132
		TUint32 MopBufferSize() const;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   133
		TInt MopCreateCustomInterface(TUid aUid);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   134
		TAny* MopCustomInterface(TUid aUid);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   135
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   136
		// from MRecordCustomInterface
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   137
		void SetGain(TUint aGain);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   138
		TUint Gain();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   139
		TUint BytesRecorded();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   140
		TInt SampleRate();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   141
		TInt Channels();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   142
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   143
		// from CActive		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   144
		void RunL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   145
		void DoCancel();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   146
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   147
		// COutputPort
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   148
		~COutputPort();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   149
		void Execute();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   150
		void Pause();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   151
		void Stop();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   152
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   153
	private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   154
		explicit COutputPort(CAudioDevice& aParent);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   155
		void ConstructL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   156
	private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   157
		CMMFBuffer* 			iCurrentBuffer;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   158
		CAudioDevice& 			iParent;			
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   159
		RPointerArray<CMMFBuffer> 	iBuffers;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   160
		MMdfOutputPortObserver* 	iObserver;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   161
		MMdfInputPort*			iPortConnectedTo;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   162
		TInt 					iSampleRate;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   163
		TInt 					iChannels;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   164
		TBool 				iInterleaved;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   165
		TUint 				iGain;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   166
		TUint 				iBytesRecorded;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   167
		TBool 				iPaused;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   168
		TUint 				iBufferSize;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   169
		};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   170
public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   171
	static CAudioDevice* NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   172
	// from CMdfProcessingUnit
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   173
	TInt Create(const MMdfProcessingUnitObserver& aProcessingUnitObserver);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   174
	TInt GetInputPorts(RPointerArray<MMdfInputPort>& aComponentInputPorts);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   175
	TInt GetOutputPorts(RPointerArray<MMdfOutputPort>& aComponentOutputPorts);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   176
	TInt Configure(const TPuConfig& aConfigurationSetup);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   177
	TInt GetConfig(TPuConfig& aConfigurationSetup);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   178
	void Initialize();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   179
	void Execute (); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   180
	TInt Pause ();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   181
	void Stop ();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   182
	TProcessingUnitState State();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   183
	TInt CreateCustomInterface(TUid aUid);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   184
	TAny* CustomInterface(TUid aUid);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   185
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   186
	// CAudioDevice
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   187
	RMdaDevSound& SoundDevice();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   188
	MMdfProcessingUnitObserver* Observer();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   189
	~CAudioDevice();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   190
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   191
private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   192
	CAudioDevice();	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   193
	void ConstructL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   194
private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   195
	CInputPort* 			iInputPort;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   196
	COutputPort* 			iOutputPort;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   197
	RMdaDevSound			iSoundDevice;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   198
	MMdfProcessingUnitObserver*	iObserver;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   199
	TProcessingUnitState 		iState;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   200
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   201
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   202
#endif // AUDIODEVICE_H