|
1 /* |
|
2 * Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: mmf audio controller header file |
|
15 * Version : %version: bh1mmcf#5.1.11 % |
|
16 * |
|
17 */ |
|
18 |
|
19 |
|
20 #ifndef __MMF_AUDIOCONTROLLER_H__ |
|
21 #define __MMF_AUDIOCONTROLLER_H__ |
|
22 |
|
23 // Standard EPOC32 includes required by this header file |
|
24 #include <e32base.h> |
|
25 #include <e32std.h> |
|
26 #include <implementationproxy.h> |
|
27 |
|
28 // Public Media Server includes |
|
29 #include <mmf/common/mmfcontroller.h> |
|
30 #include <mmf/server/mmfdatasink.h> |
|
31 #include <mmf/server/mmfdatasource.h> |
|
32 |
|
33 #include <mmf/server/mmfdatapathproxy.h> |
|
34 #include <mmf/common/mmfaudio.h> |
|
35 #include <mmf/server/mmfaudiooutput.h> |
|
36 #include <mmf/server/mmfaudioinput.h> |
|
37 #include <mmf/common/mmfstandardcustomcommands.h> |
|
38 #include <mmf/common/mmfdrmcustomcommands.h> |
|
39 #include "MCustomInterfaceCustomCommandImplementor.h" |
|
40 |
|
41 class CConfigurationComponentsFactory; |
|
42 class CAudioOutputControlUtility; |
|
43 |
|
44 const TInt KOneSecondInMicroSeconds(1000000); |
|
45 |
|
46 class CCustomInterfaceBuilder; |
|
47 class CMMFDataPath2; |
|
48 |
|
49 class CMMFMessageHolder : public CBase |
|
50 { |
|
51 public: |
|
52 static CMMFMessageHolder* NewL(TMMFMessage& aMessage) |
|
53 {return new(ELeave) CMMFMessageHolder(aMessage);} |
|
54 void Complete(TInt a) {iMessage.Complete(a);} |
|
55 private: |
|
56 CMMFMessageHolder(TMMFMessage& aMessage): CBase(), iMessage(aMessage) {} |
|
57 TMMFMessage iMessage; |
|
58 }; |
|
59 |
|
60 |
|
61 /** |
|
62 * |
|
63 * The public API for clients of the MMFAudioController |
|
64 * |
|
65 */ |
|
66 |
|
67 class CMMFAudioController : public CMMFController, |
|
68 public MAsyncEventHandler, |
|
69 public MMMFAudioPlayDeviceCustomCommandImplementor, |
|
70 public MMMFAudioRecordDeviceCustomCommandImplementor, |
|
71 public MMMFAudioPlayControllerCustomCommandImplementor, |
|
72 public MMMFAudioRecordControllerCustomCommandImplementor, |
|
73 public MCustomInterfaceCustomCommandImplementor, |
|
74 public MMMFAudioPlayControllerSetRepeatsCustomCommandImplementor, |
|
75 #ifndef SYMBIAN_CAF_V2 |
|
76 public MMMFAudioControllerCustomCommandImplementor |
|
77 #else |
|
78 public MMMFAudioControllerCustomCommandImplementor, |
|
79 public MMMFDRMCustomCommandImplementor, |
|
80 public MMMFResourceNotificationCustomCommandImplementor |
|
81 #endif |
|
82 { |
|
83 public: |
|
84 static CMMFController* NewL(); |
|
85 virtual ~CMMFAudioController(); |
|
86 |
|
87 //implement CMMFController ecom plugin interface |
|
88 virtual void AddDataSourceL(MDataSource& aDataSource); |
|
89 virtual void AddDataSinkL(MDataSink& aDataSink); |
|
90 virtual void RemoveDataSourceL(MDataSource& aDataSource); |
|
91 virtual void RemoveDataSinkL(MDataSink& aDataSink); |
|
92 |
|
93 virtual void ResetL(); |
|
94 virtual void PrimeL(); |
|
95 virtual void PlayL(); |
|
96 virtual void PauseL(); |
|
97 virtual void StopL() {} //not required |
|
98 virtual void StopL(TMMFMessage& aMessage); |
|
99 |
|
100 virtual TTimeIntervalMicroSeconds PositionL() const; |
|
101 virtual void SetPositionL(const TTimeIntervalMicroSeconds& aPosition); |
|
102 virtual TTimeIntervalMicroSeconds DurationL() const; |
|
103 virtual void CustomCommand(TMMFMessage& aMessage); |
|
104 virtual void SetPrioritySettings(const TMMFPrioritySettings& aPrioritySettings); |
|
105 virtual void GetNumberOfMetaDataEntriesL(TInt& aNumberOfEntries); |
|
106 virtual CMMFMetaDataEntry* GetMetaDataEntryL(TInt aIndex); |
|
107 |
|
108 //from MAsyncEventHandler |
|
109 virtual TInt SendEventToClient(const TMMFEvent& aEvent); |
|
110 |
|
111 //from MMMFAudioPlayDeviceCustomCommandImplementor |
|
112 virtual void MapdSetVolumeL(TInt aVolume); |
|
113 virtual void MapdGetMaxVolumeL(TInt& aMaxVolume); |
|
114 virtual void MapdGetVolumeL(TInt& aVolume); |
|
115 virtual void MapdSetVolumeRampL(const TTimeIntervalMicroSeconds& aRampDuration); |
|
116 virtual void MapdSetBalanceL(TInt aBalance); |
|
117 virtual void MapdGetBalanceL(TInt& aBalance); |
|
118 |
|
119 //from MMMFAudioRecordDeviceCustomCommandImplementor |
|
120 virtual void MardSetGainL(TInt aGain); |
|
121 virtual void MardGetMaxGainL(TInt& aMaxGain); |
|
122 virtual void MardGetGainL(TInt& aGain); |
|
123 virtual void MardSetBalanceL(TInt aBalance); |
|
124 virtual void MardGetBalanceL(TInt& aBalance); |
|
125 |
|
126 //from MMMFAudioPlayControllerCustomCommandImplementor |
|
127 virtual void MapcSetPlaybackWindowL(const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd); |
|
128 virtual void MapcDeletePlaybackWindowL(); |
|
129 virtual void MapcGetLoadingProgressL(TInt& aPercentageComplete); |
|
130 |
|
131 //from MMMFAudioRecordControllerCustomCommandImplementor |
|
132 virtual void MarcGetRecordTimeAvailableL(TTimeIntervalMicroSeconds& aTime); |
|
133 virtual void MarcSetMaxDurationL(const TTimeIntervalMicroSeconds& aMaxDuration); |
|
134 virtual void MarcSetMaxFileSizeL(TInt aFileSize); |
|
135 virtual void MarcCropL(TBool aToEnd); |
|
136 virtual void MarcAddMetaDataEntryL(const CMMFMetaDataEntry& aNewEntry); |
|
137 virtual void MarcRemoveMetaDataEntryL(TInt aIndex); |
|
138 virtual void MarcReplaceMetaDataEntryL(TInt aIndex, const CMMFMetaDataEntry& aNewEntry); |
|
139 |
|
140 //from MMMFAudioControllerCustomCommandImplementor |
|
141 virtual void MacSetSourceSampleRateL(TUint aSampleRate); |
|
142 virtual void MacSetSourceNumChannelsL(TUint aNumChannels); |
|
143 virtual void MacSetSourceFormatL(TUid aFormatUid); |
|
144 virtual void MacSetSinkSampleRateL(TUint aSampleRate); |
|
145 virtual void MacSetSinkNumChannelsL(TUint aNumChannels); |
|
146 virtual void MacSetSinkFormatL(TUid aFormatUid); |
|
147 virtual void MacSetCodecL(TFourCC aSourceDataType, TFourCC aSinkDataType); |
|
148 virtual void MacSetSourceBitRateL(TUint aBitRate); |
|
149 virtual void MacSetSourceDataTypeL(TFourCC aDataType); |
|
150 virtual void MacSetSinkBitRateL(TUint aRate); |
|
151 virtual void MacSetSinkDataTypeL(TFourCC aDataType); |
|
152 virtual void MacGetSourceSampleRateL(TUint& aRate); |
|
153 virtual void MacGetSourceBitRateL(TUint& aRate); |
|
154 virtual void MacGetSourceNumChannelsL(TUint& aNumChannels); |
|
155 virtual void MacGetSourceFormatL(TUid& aFormat); |
|
156 virtual void MacGetSourceDataTypeL(TFourCC& aDataType); |
|
157 virtual void MacGetSinkSampleRateL(TUint& aRate); |
|
158 virtual void MacGetSinkBitRateL(TUint& aRate); |
|
159 virtual void MacGetSinkNumChannelsL(TUint& aNumChannels); |
|
160 virtual void MacGetSinkFormatL(TUid& aFormat); |
|
161 virtual void MacGetSinkDataTypeL(TFourCC& aDataType); |
|
162 virtual void MacGetSupportedSourceSampleRatesL(RArray<TUint>& aSupportedRates); |
|
163 virtual void MacGetSupportedSourceBitRatesL(RArray<TUint>& aSupportedRates); |
|
164 virtual void MacGetSupportedSourceNumChannelsL(RArray<TUint>& aSupportedChannels); |
|
165 virtual void MacGetSupportedSourceDataTypesL(RArray<TFourCC>& aSupportedDataTypes); |
|
166 virtual void MacGetSupportedSinkSampleRatesL(RArray<TUint>& aSupportedRates); |
|
167 virtual void MacGetSupportedSinkBitRatesL(RArray<TUint>& aSupportedRates); |
|
168 virtual void MacGetSupportedSinkNumChannelsL(RArray<TUint>& aSupportedChannels); |
|
169 virtual void MacGetSupportedSinkDataTypesL(RArray<TFourCC>& aSupportedDataTypes); |
|
170 |
|
171 // resource notification |
|
172 virtual void MarnRegisterAsClientL(TUid aEventType,const TDesC8& aNotificationRegistrationData); |
|
173 virtual void MarnCancelRegisterAsClientL(TUid aEventType); |
|
174 virtual void MarnGetResourceNotificationDataL(TUid aEventType,TDes8& aNotificationData); |
|
175 virtual void MarnWillResumePlayL(); |
|
176 |
|
177 #ifdef SYMBIAN_CAF_V2 |
|
178 // from MMMFDRMCustomCommandImplementor |
|
179 virtual TInt MdcExecuteIntent(ContentAccess::TIntent aIntent); |
|
180 virtual TInt MdcEvaluateIntent(ContentAccess::TIntent aIntent); |
|
181 virtual TInt MdcDisableAutomaticIntent(TBool aDisableAutoIntent); |
|
182 virtual TInt MdcSetAgentProperty(ContentAccess::TAgentProperty aProperty, TInt aValue); |
|
183 #endif |
|
184 |
|
185 //from MMMFAudioPlayControllerSetRepeatsCustomCommandImplementor |
|
186 virtual TInt MapcSetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence); |
|
187 public: |
|
188 |
|
189 /** |
|
190 TControllerState is an enumeration within the namespace CMMFAudioController |
|
191 The enumeration provides a set of control states: |
|
192 EStopped is the initial state the controller resides in after it has been loaded |
|
193 EPrimed is the state the controller is in when it has been associated with datapaths but is not streaming data |
|
194 EPlaying is the state the controller is in when it is streaming data |
|
195 */ |
|
196 enum TControllerState |
|
197 { |
|
198 EStopped, |
|
199 EPrimed, |
|
200 EPlaying |
|
201 }; |
|
202 |
|
203 protected: |
|
204 CMMFAudioController(); |
|
205 |
|
206 protected: |
|
207 void ConstructL(); |
|
208 void NegotiateL(); |
|
209 |
|
210 void ConvertFromDevSoundCapsToSampleRatesL(const TMMFCapabilities& aDevSoundCaps, |
|
211 RArray<TUint>& aSampleRates); |
|
212 void ConvertFromDevSoundCapsToNumChannelsL(const TMMFCapabilities& aDevSoundCaps, |
|
213 RArray<TUint>& aNumChannels); |
|
214 void ConvertFromDevSoundCapsToDataTypesL(const TMMFCapabilities& aDevSoundCaps, |
|
215 RArray<TFourCC>& aDataTypes); |
|
216 void ConvertFromSampleRateToDevSoundCapsL(TUint aSampleRate, TMMFCapabilities& aDevSoundCaps); |
|
217 void ConvertFromNumChannelsToDevSoundCapsL(TUint aNumChannels, TMMFCapabilities& aDevSoundCaps); |
|
218 void ConvertFromDataTypeToDevSoundCapsL(TFourCC aDataType, TMMFCapabilities& aDevSoundCaps); |
|
219 |
|
220 virtual const TMMFMessageDestination& GetCustomInterfaceBuilderL(); |
|
221 |
|
222 // state accessor functions |
|
223 TBool SetState( TControllerState aState ); |
|
224 TControllerState State() const ; |
|
225 TBool IsValidStateTransition( TControllerState aState ) const; |
|
226 TBool Invariant() const; |
|
227 TBool IsValidState( TControllerState aState ) const ; |
|
228 TBool ResetPostCondition() const; |
|
229 TBool SinkFormatRequired( MDataSink& aDataSink) const; |
|
230 TBool SourceFormatRequired(MDataSource& aDataSource) const; |
|
231 void CalculateLeftRightBalance( TInt& aLeft, TInt& aRight, TInt aBalance ) const; |
|
232 void CalculateBalance( TInt& aBalance, TInt aLeft, TInt aRight ) const; |
|
233 |
|
234 //This method is used to assist testing of the audio controller |
|
235 virtual TBool IsUnderTest(){return EFalse;} |
|
236 |
|
237 private: |
|
238 MDataSource* iDataSource; |
|
239 MDataSink* iDataSink; |
|
240 CMMFDataPath2* iDataPath; |
|
241 CMMFFormatDecode* iSourceFormat; |
|
242 CMMFFormatEncode* iSinkFormat; |
|
243 TMediaId iMediaId; |
|
244 #ifdef SYMBIAN_CAF_V2 |
|
245 TBool iDisableAutoIntent; |
|
246 #endif |
|
247 TControllerState iState; |
|
248 TMMFPrioritySettings iPrioritySettings; |
|
249 TBool iSourceAndSinkAdded; |
|
250 TBool iStoppingRecording; |
|
251 TBool iStoppingPlaying; |
|
252 CMMFMessageHolder* iStoppingMessage; |
|
253 TBool iIsPaused; // used to determine DRM command to send on PlayL() |
|
254 CCustomInterfaceBuilder* iCustomInterfaceBuilder; |
|
255 TBool iSourceFormatSupportsCustomInterfaces; |
|
256 TBool iRegisterARN; |
|
257 TBool iIsPreemptionPause; |
|
258 |
|
259 CConfigurationComponentsFactory* iFactory; |
|
260 CAudioOutputControlUtility* iAudioOutputControlUtility; // used for audio routing for DRM files |
|
261 }; |
|
262 |
|
263 |
|
264 #endif |