First public contribution.
1 // Copyright (c) 2005-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".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
19 #include <e32msgqueue.h>
20 #include <mdf/mdfprocessingunit.h>
21 #include <mdf/mdfinputport.h>
22 #include <mdf/mdfoutputport.h>
23 #include <mmf/server/mmfhwdevicesetup.h>
24 #include <mdf/mdfcommon.h>
26 #ifdef SYMBIAN_MDF_SHAREDCHUNK_SOUNDDRIVER
27 #include "mdasoundadapter.h"
35 Audio Sink/Source processing unit
37 class CAudioDevice : public CMdfProcessingUnit
41 Audio Sink/Source input port
43 class CInputPort: public CActive,
45 public MPlayCustomInterface
48 static CInputPort* NewL(CAudioDevice& aParent);
51 TInt MipConfigure(const TPuConfig& aConfiguration);
52 TInt MipGetConfig(TPuConfig& aConfigurationSetup);
54 void MipSetObserver(const MMdfInputPortObserver& aInputPortObserver);
55 CMMFBuffer* MipCreateBuffer(TInt aBufferSize);
56 TInt MipUseBuffer(CMMFBuffer& aBuffer);
57 TInt MipFreeBuffer(CMMFBuffer* aBuffer);
58 TInt MipTunnelRequest(const MMdfOutputPort& aOutputPortToBeConnectedTo,
59 TTunnelFlags& aTunnelFlags, TSupplierType& aSupplierType);
60 void MipWriteData(CMMFBuffer& aBuffer);
61 void MipDisconnectTunnel();
62 void MipRestartTunnel();
63 TBool MipIsTunnelled() const;
64 TInt MipIndex() const;
65 TUint32 MipBufferSize() const;
66 TInt MipCreateCustomInterface(TUid aUid);
67 TAny* MipCustomInterface(TUid aUid);
69 // from MPlayCustomInterface
70 void SetVolume(TUint aVolume);
73 void SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration);
74 TTimeIntervalMicroSeconds& VolumeRamp();
89 explicit CInputPort(CAudioDevice& aParent);
92 CMMFBuffer* iCurrentBuffer;
93 CAudioDevice& iParent;
94 MMdfOutputPort* iPortConnectedTo;
95 RPointerArray<CMMFBuffer> iBuffers;
96 MMdfInputPortObserver* iObserver;
101 TTimeIntervalMicroSeconds iRampDuration;
108 Audio Sink/Source output port
110 class COutputPort: public CActive,
111 public MMdfOutputPort,
112 public MRecordCustomInterface
115 static COutputPort* NewL(CAudioDevice& aParent);
117 // from MMdfOutputPort
118 TInt MopConfigure(const TPuConfig& aConfiguration);
119 TInt MopGetConfig(TPuConfig& aConfigurationSetup);
120 void MopInitialize();
121 void MopSetObserver(const MMdfOutputPortObserver& aOutputPortObserver);
122 CMMFBuffer* MopCreateBuffer(TInt aBufferSize);
123 TInt MopUseBuffer(CMMFBuffer& aBuffer);
124 TInt MopFreeBuffer(CMMFBuffer* aBuffer);
125 TInt MopTunnelRequest(const MMdfInputPort& aInputPortToBeConnectedTo,
126 TTunnelFlags& aTunnelFlags, TSupplierType& aSupplierType);
127 void MopReadData(CMMFBuffer& aBuffer);
128 void MopDisconnectTunnel();
129 void MopRestartTunnel();
130 TBool MopIsTunnelled() const;
131 TInt MopIndex() const;
132 TUint32 MopBufferSize() const;
133 TInt MopCreateCustomInterface(TUid aUid);
134 TAny* MopCustomInterface(TUid aUid);
136 // from MRecordCustomInterface
137 void SetGain(TUint aGain);
139 TUint BytesRecorded();
154 explicit COutputPort(CAudioDevice& aParent);
157 CMMFBuffer* iCurrentBuffer;
158 CAudioDevice& iParent;
159 RPointerArray<CMMFBuffer> iBuffers;
160 MMdfOutputPortObserver* iObserver;
161 MMdfInputPort* iPortConnectedTo;
166 TUint iBytesRecorded;
171 static CAudioDevice* NewL();
172 // from CMdfProcessingUnit
173 TInt Create(const MMdfProcessingUnitObserver& aProcessingUnitObserver);
174 TInt GetInputPorts(RPointerArray<MMdfInputPort>& aComponentInputPorts);
175 TInt GetOutputPorts(RPointerArray<MMdfOutputPort>& aComponentOutputPorts);
176 TInt Configure(const TPuConfig& aConfigurationSetup);
177 TInt GetConfig(TPuConfig& aConfigurationSetup);
182 TProcessingUnitState State();
183 TInt CreateCustomInterface(TUid aUid);
184 TAny* CustomInterface(TUid aUid);
187 RMdaDevSound& SoundDevice();
188 MMdfProcessingUnitObserver* Observer();
195 CInputPort* iInputPort;
196 COutputPort* iOutputPort;
197 RMdaDevSound iSoundDevice;
198 MMdfProcessingUnitObserver* iObserver;
199 TProcessingUnitState iState;
202 #endif // AUDIODEVICE_H