|
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 |
|
19 #include <e32base.h> |
|
20 |
|
21 #include "mmfdevsoundadaptationbody.h" |
|
22 #include "cdevaudiocontrol.h" |
|
23 #include "cdevaudio.h" |
|
24 #include "a3ffourcclookup.h" |
|
25 |
|
26 #include <a3f/audioformatuids.h> |
|
27 |
|
28 #include "mglobalproperties.h" |
|
29 |
|
30 const TInt KDefaultOnDTMFLength = 250000; |
|
31 const TInt KDefaultOffDTMFLength = 50000; |
|
32 const TInt KDefaultPauseDTMFLength = 250000; |
|
33 const TInt KDefaultBufferSize = 4096; |
|
34 |
|
35 // ============================ MEMBER FUNCTIONS =============================// ----------------------------------------------------------------------------- |
|
36 // CMMFDevSoundAdaptation::CBody::CBody |
|
37 // C++ default constructor can NOT contain any code, that |
|
38 // might leave. |
|
39 // ----------------------------------------------------------------------------- |
|
40 // |
|
41 CMMFDevSoundAdaptation::CBody::CBody(MDevSoundAdaptationObserver& aDevSoundObserver, |
|
42 MGlobalProperties& aGlobalProperties) |
|
43 :iDevSoundObserver(aDevSoundObserver) |
|
44 { |
|
45 TRACE_CREATE(); |
|
46 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::CBody *CD1*, CtxDevSound, DPLOCAL); |
|
47 DP_IN(); |
|
48 |
|
49 iGlobalProperties = &aGlobalProperties; |
|
50 |
|
51 iMode = EMMFStateIdle; |
|
52 // Initialize default config for cases when the DevSound's client query using |
|
53 // CMMDevSound::Config() before setting the configuration through |
|
54 // CMMDevSound::SetConfigL(TMMFCappabilites aConfig) |
|
55 iMmfConfig.iRate = EMMFSampleRate8000Hz; |
|
56 iMmfConfig.iEncoding = EMMFSoundEncoding16BitPCM; |
|
57 iMmfConfig.iChannels = EMMFMono; |
|
58 iMmfConfig.iBufferSize = KDefaultBufferSize; |
|
59 |
|
60 DP_OUT(); |
|
61 } |
|
62 |
|
63 // ----------------------------------------------------------------------------- |
|
64 // CMMFDevSoundAdaptation::CBody::ConstructL |
|
65 // Symbian 2nd phase constructor can leave. |
|
66 // assumes that iParent has already been set up properly |
|
67 // ----------------------------------------------------------------------------- |
|
68 // |
|
69 void CMMFDevSoundAdaptation::CBody::ConstructL(MGlobalProperties& aGlobalProperties) |
|
70 { |
|
71 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::ConstructL *CD1*, CtxDevSound, DPLOCAL); |
|
72 DP_IN(); |
|
73 |
|
74 // create DevAudio |
|
75 iDevAudio = CDevAudio::NewL(iDevSoundObserver, aGlobalProperties); |
|
76 |
|
77 //Default values for DTMF tones |
|
78 iToneData.SetDtmfLengths(KDefaultOnDTMFLength,KDefaultOffDTMFLength,KDefaultPauseDTMFLength); |
|
79 |
|
80 DP_OUT(); |
|
81 } |
|
82 |
|
83 // ----------------------------------------------------------------------------- |
|
84 // CMMFDevSoundAdaptation::CBody::NewL |
|
85 // Two-phased constructor. |
|
86 // ----------------------------------------------------------------------------- |
|
87 // |
|
88 CMMFDevSoundAdaptation::CBody* CMMFDevSoundAdaptation::CBody::NewL(MDevSoundAdaptationObserver& aDevSoundObserver, |
|
89 MGlobalProperties& aGlobalProperties) |
|
90 { |
|
91 DP_STATIC_CONTEXT(CMMFDevSoundAdaptation::CBody::NewL *CD0*, CtxDevSound, DPLOCAL); |
|
92 DP_IN(); |
|
93 CMMFDevSoundAdaptation::CBody* self = new (ELeave) CBody(aDevSoundObserver, aGlobalProperties); |
|
94 CleanupStack::PushL(self); |
|
95 self->ConstructL(aGlobalProperties); |
|
96 CleanupStack::Pop(self); |
|
97 DP0_RET(self, "0x%x"); |
|
98 } |
|
99 |
|
100 // ----------------------------------------------------------------------------- |
|
101 // CMMFDevSoundAdaptation::CBody::~CBody |
|
102 // Destructor |
|
103 // ----------------------------------------------------------------------------- |
|
104 // |
|
105 CMMFDevSoundAdaptation::CBody::~CBody() |
|
106 { |
|
107 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::~CBody *CD1*, CtxDevSound, DPLOCAL); |
|
108 DP_IN(); |
|
109 if(iDevAudio) |
|
110 { |
|
111 delete iDevAudio; |
|
112 } |
|
113 DP_OUT(); |
|
114 } |
|
115 |
|
116 // CMMFDevSoundAdaptation:CBody::PostOpenL() |
|
117 // 2nd phase post open - used to setup internal attributes asynchronously |
|
118 // |
|
119 void CMMFDevSoundAdaptation::CBody::PostOpenL() |
|
120 { |
|
121 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::PostOpenL *CD1*, CtxDevSound, DPLOCAL); |
|
122 DP_IN(); |
|
123 User::LeaveIfError(iDevAudio->PostOpen()); |
|
124 DP_OUT(); |
|
125 } |
|
126 |
|
127 // ----------------------------------------------------------------------------- |
|
128 // CMMFDevSoundAdaptation::CBody::InitializeL |
|
129 // Initializes CMMFDevSoundProxy object to play and record PCM16 raw audio data |
|
130 // with sampling rate of 8 KHz. |
|
131 // On completion of Initialization, calls InitializeComplete() on |
|
132 // aDevSoundObserver. |
|
133 // Leaves on failure. |
|
134 // (other items were commented in a header). |
|
135 // ----------------------------------------------------------------------------- |
|
136 // |
|
137 void CMMFDevSoundAdaptation::CBody::InitializeL(TMMFState aMode) |
|
138 { |
|
139 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::InitializeL *CD1*, CtxDevSound, DPLOCAL); |
|
140 DP_IN(); |
|
141 if (aMode == EMMFStateTonePlaying) |
|
142 { |
|
143 DoInitializeL(KUidFormatTone, aMode); |
|
144 } |
|
145 else |
|
146 { |
|
147 DoInitializeL(KUidFormatPCM16, aMode); |
|
148 } |
|
149 DP_OUT(); |
|
150 } |
|
151 |
|
152 // ----------------------------------------------------------------------------- |
|
153 // CMMFDevSoundAdaptation::CBody::InitializeL |
|
154 // Initializes DevSound object for the mode aMode for processing audio data |
|
155 // with hardware device aHWDev. |
|
156 // On completion of Initialization, the observer will be notified via call back |
|
157 // InitializeComplete(). |
|
158 // Leaves on failure. |
|
159 // (other items were commented in a header). |
|
160 // ----------------------------------------------------------------------------- |
|
161 // |
|
162 void CMMFDevSoundAdaptation::CBody::InitializeL(TUid /*aHWDev*/, |
|
163 TMMFState /*aMode*/) |
|
164 { |
|
165 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::InitializeL *CD1*, CtxDevSound, DPLOCAL); |
|
166 DP_IN(); |
|
167 User::LeaveIfError(KErrNotSupported); |
|
168 DP_OUT(); |
|
169 } |
|
170 |
|
171 // ----------------------------------------------------------------------------- |
|
172 // CMMFDevSoundAdaptation::CBody::InitializeL |
|
173 // Initializes DevSound object for the mode aMode for processing audio data |
|
174 // with hardware device supporting FourCC aDesiredFourCC. |
|
175 // On completion of Initialization, the observer will be notified via call back |
|
176 // InitializeComplete(). |
|
177 // Leaves on failure. |
|
178 // (other items were commented in a header). |
|
179 // ----------------------------------------------------------------------------- |
|
180 // |
|
181 void CMMFDevSoundAdaptation::CBody::InitializeL( |
|
182 TFourCC aDesiredFourCC, |
|
183 TMMFState aMode) |
|
184 { |
|
185 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::InitializeL *CD1*, CtxDevSound, DPLOCAL); |
|
186 DP_IN(); |
|
187 |
|
188 TUid format = {0}; |
|
189 TInt err = KErrNone; |
|
190 |
|
191 err = iGlobalProperties->GetFourCCConvertor().FourCCToFormat(aDesiredFourCC, format); |
|
192 if(err == KErrNone) |
|
193 { |
|
194 DoInitializeL(format, aMode); |
|
195 } |
|
196 else |
|
197 { |
|
198 User::LeaveIfError(KErrNotSupported); |
|
199 } |
|
200 DP_OUT(); |
|
201 } |
|
202 |
|
203 // ----------------------------------------------------------------------------- |
|
204 // CMMFDevSoundAdaptation::CBody::DoInitializeL |
|
205 // ----------------------------------------------------------------------------- |
|
206 // |
|
207 void CMMFDevSoundAdaptation::CBody::DoInitializeL( |
|
208 TUid aFormat, |
|
209 TMMFState aMode) |
|
210 { |
|
211 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::DoInitializeL *CD1*, CtxDevSound, DPLOCAL); |
|
212 DP2_IN("format=0x%x, mode=%d",aFormat.iUid,aMode); |
|
213 |
|
214 |
|
215 ASSERT(iDevAudio); |
|
216 |
|
217 TInt err(KErrNone); |
|
218 |
|
219 if ((aMode == EMMFStatePlaying) || (aMode == EMMFStateRecording) |
|
220 || (aMode == EMMFStateTonePlaying)) |
|
221 { |
|
222 err = iDevAudio->Initialize(aFormat, aMode); |
|
223 } |
|
224 else |
|
225 { |
|
226 err = KErrNotSupported; |
|
227 } |
|
228 User::LeaveIfError(err); |
|
229 |
|
230 iMode = aMode; |
|
231 |
|
232 DP_OUT(); |
|
233 } |
|
234 |
|
235 // ----------------------------------------------------------------------------- |
|
236 // CMMFDevSoundAdaptation::CBody::CancelInitialize |
|
237 // Cancels the initialization of DevSound object |
|
238 // returns an error code |
|
239 // (other items were commented in a header). |
|
240 // ----------------------------------------------------------------------------- |
|
241 // |
|
242 TInt CMMFDevSoundAdaptation::CBody::CancelInitialize() |
|
243 { |
|
244 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::CancelInitialize *CD1*, CtxDevSound, DPLOCAL); |
|
245 DP_IN(); |
|
246 TInt err=iDevAudio->CancelInitialize(); |
|
247 DP0_RET(err, "%d"); |
|
248 } |
|
249 |
|
250 |
|
251 // ----------------------------------------------------------------------------- |
|
252 // CMMFDevSoundAdaptation::CBody::Capabilities |
|
253 // Returns the supported Audio settings. |
|
254 // (other items were commented in a header). |
|
255 // ----------------------------------------------------------------------------- |
|
256 // |
|
257 TInt CMMFDevSoundAdaptation::CBody::Capabilities(TMMFCapabilities& aCap) |
|
258 { |
|
259 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::Capabilities *CD1*, CtxDevSound, DPLOCAL); |
|
260 DP_IN(); |
|
261 // query real values, on error just return last known (default) values |
|
262 TInt err = iDevAudio->GetAudioControl()->GetCapabilities(aCap); |
|
263 DP0_RET(err, "%d"); |
|
264 } |
|
265 |
|
266 // ----------------------------------------------------------------------------- |
|
267 // CMMFDevSoundAdaptation::CBody::Config() |
|
268 // Returns the current audio settings. |
|
269 // (other items were commented in a header). |
|
270 // ----------------------------------------------------------------------------- |
|
271 // |
|
272 TMMFCapabilities CMMFDevSoundAdaptation::CBody::Config() const |
|
273 { |
|
274 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::Config *CD1*, CtxDevSound, DPLOCAL); |
|
275 DP_IN(); |
|
276 // Query real values, on error just return last known (default) values |
|
277 TMMFCapabilities config; |
|
278 TInt err = iDevAudio->GetAudioControl()->GetConfig(config); |
|
279 // TBD: for now, just return set value for encoding - codec does not give this |
|
280 config.iEncoding = iMmfConfig.iEncoding; |
|
281 if ( err == KErrNone ) |
|
282 { |
|
283 DP0_RET(config, "0"); |
|
284 } |
|
285 DP0_RET(iMmfConfig, "0"); |
|
286 } |
|
287 |
|
288 // ----------------------------------------------------------------------------- |
|
289 // CMMFDevSoundAdaptation::CBody::SetConfigL |
|
290 // Configure device for the settings in aConfig. |
|
291 // Use this to set sampling rate, Encoding and Mono/Stereo. |
|
292 // |
|
293 // (other items were commented in a header). |
|
294 // ----------------------------------------------------------------------------- |
|
295 // |
|
296 void CMMFDevSoundAdaptation::CBody::SetConfigL(const TMMFCapabilities& aConfig) |
|
297 { |
|
298 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::SetConfigL *CD1*, CtxDevSound, DPLOCAL); |
|
299 DP3_IN("rate 0x%x, channels 0x%x, encoding 0x%x", |
|
300 aConfig.iRate, aConfig.iChannels, aConfig.iEncoding); |
|
301 User::LeaveIfError(iDevAudio->GetAudioControl()->SetConfig(aConfig)); |
|
302 // success, update local copy |
|
303 iMmfConfig.iRate = aConfig.iRate; |
|
304 iMmfConfig.iChannels = aConfig.iChannels; |
|
305 iMmfConfig.iEncoding = aConfig.iEncoding; |
|
306 DP_OUT(); |
|
307 } |
|
308 |
|
309 // ----------------------------------------------------------------------------- |
|
310 // CMMFDevSoundAdaptation::CBody::MaxVolume |
|
311 // Returns an integer representing the maximum volume. |
|
312 // This is the maximum value which can be passed to CMMFDevSoundProxy::SetVolume |
|
313 // (other items were commented in a header). |
|
314 // ----------------------------------------------------------------------------- |
|
315 // |
|
316 TInt CMMFDevSoundAdaptation::CBody::MaxVolume() |
|
317 { |
|
318 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::MaxVolume *CD1*, CtxDevSound, DPLOCAL); |
|
319 DP_IN(); |
|
320 DP0_RET(iDevAudio->DevSoundMaxVolume(), "%d"); |
|
321 } |
|
322 |
|
323 // ----------------------------------------------------------------------------- |
|
324 // CMMFDevSoundAdaptation::CBody::Volume |
|
325 // Returns an integer representing the current volume. |
|
326 // (other items were commented in a header). |
|
327 // ----------------------------------------------------------------------------- |
|
328 // |
|
329 TInt CMMFDevSoundAdaptation::CBody::Volume() |
|
330 { |
|
331 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::Volume *CD1*, CtxDevSound, DPLOCAL); |
|
332 DP_IN(); |
|
333 DP0_RET(iDevAudio->DevSoundVolume(), "%d"); |
|
334 } |
|
335 |
|
336 // ----------------------------------------------------------------------------- |
|
337 // CMMFDevSoundAdaptation::CBody::SetVolume |
|
338 // Changes the current playback volume to a specified value. |
|
339 // The volume can be changed before or during playback and is effective |
|
340 // immediately. |
|
341 // (other items were commented in a header). |
|
342 // ----------------------------------------------------------------------------- |
|
343 // |
|
344 TInt CMMFDevSoundAdaptation::CBody::SetVolume(TInt aVolume, TBool& aAsyncCompletion) |
|
345 { |
|
346 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::SetVolume *CD1*, CtxDevSound, DPLOCAL); |
|
347 DP1_IN("aVolume = %d", aVolume); |
|
348 TInt error = iDevAudio->SetDevSoundVolume(aVolume, aAsyncCompletion); |
|
349 DP0_RET(error, "%d"); |
|
350 } |
|
351 |
|
352 // ----------------------------------------------------------------------------- |
|
353 // CMMFDevSoundAdaptation::CBody::MaxGain |
|
354 // Returns an integer representing the maximum gain. |
|
355 // This is the maximum value which can be passed to CMMFDevSoundProxy::SetGain. |
|
356 // (other items were commented in a header). |
|
357 // ----------------------------------------------------------------------------- |
|
358 // |
|
359 TInt CMMFDevSoundAdaptation::CBody::MaxGain() |
|
360 { |
|
361 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::MaxGain *CD1*, CtxDevSound, DPLOCAL); |
|
362 DP_IN(); |
|
363 DP0_RET(iDevAudio->DevSoundMaxGain(), "%d"); |
|
364 } |
|
365 |
|
366 // ----------------------------------------------------------------------------- |
|
367 // CMMFDevSoundAdaptation::CBody::Gain |
|
368 // Returns an integer representing the current gain. |
|
369 // (other items were commented in a header). |
|
370 // ----------------------------------------------------------------------------- |
|
371 // |
|
372 TInt CMMFDevSoundAdaptation::CBody::Gain() |
|
373 { |
|
374 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::Gain *CD1*, CtxDevSound, DPLOCAL); |
|
375 DP_IN(); |
|
376 DP0_RET(iDevAudio->DevSoundGain(), "%d"); |
|
377 } |
|
378 |
|
379 // ----------------------------------------------------------------------------- |
|
380 // CMMFDevSoundAdaptation::CBody::SetGain |
|
381 // Changes the current recording gain to a specified value. |
|
382 // The gain can be changed before or during recording and is effective |
|
383 // immediately. |
|
384 // (other items were commented in a header). |
|
385 // ----------------------------------------------------------------------------- |
|
386 // |
|
387 TInt CMMFDevSoundAdaptation::CBody::SetGain(TInt aGain, TBool& aAsyncCompletion) |
|
388 { |
|
389 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::SetGain *CD1*, CtxDevSound, DPLOCAL); |
|
390 DP1_IN("aGain = %d", aGain); |
|
391 TInt error = iDevAudio->SetDevSoundGain(aGain, aAsyncCompletion); |
|
392 DP0_RET(error, "%d"); |
|
393 } |
|
394 |
|
395 // ----------------------------------------------------------------------------- |
|
396 // CMMFDevSoundAdaptation::CBody::GetPlayBalanceL |
|
397 // Returns the speaker balance set for playing. |
|
398 // Leaves on failure. |
|
399 // (other items were commented in a header). |
|
400 // ----------------------------------------------------------------------------- |
|
401 // |
|
402 void CMMFDevSoundAdaptation::CBody::GetPlayBalanceL(TInt& aLeftPercentage, |
|
403 TInt& aRightPercentage) |
|
404 { |
|
405 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::GetPlayBalanceL *CD1*, CtxDevSound, DPLOCAL); |
|
406 DP_IN(); |
|
407 iDevAudio->GetDevSoundPlayBalance(aLeftPercentage, aRightPercentage); |
|
408 DP_OUT(); |
|
409 } |
|
410 |
|
411 // ----------------------------------------------------------------------------- |
|
412 // CMMFDevSoundAdaptation::CBody::SetPlayBalanceL |
|
413 // Sets the speaker balance for playing. |
|
414 // The speaker balance can be changed before or during playback and is |
|
415 // effective immediately. |
|
416 // (other items were commented in a header). |
|
417 // ----------------------------------------------------------------------------- |
|
418 // |
|
419 void CMMFDevSoundAdaptation::CBody::SetPlayBalanceL(TInt aLeftPercentage, |
|
420 TInt aRightPercentage, |
|
421 TBool& aAsyncCompletion) |
|
422 { |
|
423 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::SetPlayBalanceL *CD1*, CtxDevSound, DPLOCAL); |
|
424 DP2_IN("aLeftPercentage = %d, aRightPercentage=%d", aLeftPercentage, aRightPercentage); |
|
425 |
|
426 User::LeaveIfError(iDevAudio->SetDevSoundPlayBalance(aLeftPercentage, aRightPercentage, aAsyncCompletion)); |
|
427 |
|
428 DP_OUT(); |
|
429 } |
|
430 |
|
431 // ----------------------------------------------------------------------------- |
|
432 // CMMFDevSoundAdaptation::CBody::GetRecordBalanceL |
|
433 // Returns the microphone gain balance set for recording. |
|
434 // Leaves on failure. |
|
435 // (other items were commented in a header). |
|
436 // ----------------------------------------------------------------------------- |
|
437 // |
|
438 void CMMFDevSoundAdaptation::CBody::GetRecordBalanceL(TInt& aLeftPercentage, |
|
439 TInt& aRightPercentage) |
|
440 { |
|
441 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::GetRecordBalanceL *CD1*, CtxDevSound, DPLOCAL); |
|
442 DP_IN(); |
|
443 |
|
444 iDevAudio->GetDevSoundRecordBalance(aLeftPercentage, aRightPercentage); |
|
445 |
|
446 DP_OUT(); |
|
447 } |
|
448 |
|
449 // ----------------------------------------------------------------------------- |
|
450 // CMMFDevSoundAdaptation::CBody::SetRecordBalanceL |
|
451 // Sets the microphone gain balance for recording. |
|
452 // The microphone gain balance can be changed before or during recording and |
|
453 // is effective immediately. |
|
454 // (other items were commented in a header). |
|
455 // ----------------------------------------------------------------------------- |
|
456 // |
|
457 void CMMFDevSoundAdaptation::CBody::SetRecordBalanceL(TInt aLeftPercentage, |
|
458 TInt aRightPercentage, |
|
459 TBool& aAsyncCompletion) |
|
460 { |
|
461 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::SetRecordBalanceL *CD1*, CtxDevSound, DPLOCAL); |
|
462 DP2_IN("aLeftPercentage = %d, aRightPercentage=%d", aLeftPercentage, aRightPercentage); |
|
463 |
|
464 User::LeaveIfError(iDevAudio->SetDevSoundRecordBalance(aLeftPercentage, aRightPercentage,aAsyncCompletion)); |
|
465 |
|
466 DP_OUT(); |
|
467 } |
|
468 |
|
469 // ----------------------------------------------------------------------------- |
|
470 // CMMFDevSoundAdaptation::CBody::PlayInitL |
|
471 // Initializes audio device and start play process. This method queries and |
|
472 // acquires the audio policy before initializing audio device. If there was an |
|
473 // error during policy initialization, PlayError() method will be called on |
|
474 // the observer with error code KErrAccessDenied, otherwise BufferToBeFilled() |
|
475 // method will be called with a buffer reference. After reading data into the |
|
476 // buffer reference passed, the client should call PlayData() to play data. |
|
477 // |
|
478 // The amount of data that can be played is specified in |
|
479 // CMMFBuffer::RequestSize(). Any data that is read into buffer beyond this |
|
480 // size will be ignored. |
|
481 // |
|
482 // Leaves on failure. |
|
483 // (other items were commented in a header). |
|
484 // ----------------------------------------------------------------------------- |
|
485 // |
|
486 void CMMFDevSoundAdaptation::CBody::PlayInitL() |
|
487 { |
|
488 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::PlayInitL *CD1*, CtxDevSound, DPLOCAL); |
|
489 DP_IN(); |
|
490 |
|
491 if(iMode==EMMFStatePlaying) |
|
492 { |
|
493 User::LeaveIfError(iDevAudio->GetAudioControl()->ProcessInit()); |
|
494 } |
|
495 else |
|
496 { |
|
497 DP1(DLERR,"Current mode is not EMMFStatePlaying! (iMode=%d)",iMode); |
|
498 User::Leave(KErrNotReady); |
|
499 } |
|
500 DP_OUT(); |
|
501 } |
|
502 |
|
503 // ----------------------------------------------------------------------------- |
|
504 // CMMFDevSoundAdaptation::CBody::RecordInitL |
|
505 // Initializes audio device and start record process. This method queries and |
|
506 // acquires the audio policy before initializing audio device. If there was an |
|
507 // error during policy initialization, RecordError() method will be called on |
|
508 // the observer with error code KErrAccessDenied, otherwise BufferToBeEmptied() |
|
509 // method will be called with a buffer reference. This buffer contains recorded |
|
510 // or encoded data. After processing data in the buffer reference passed, the |
|
511 // client should call RecordData() to continue recording process. |
|
512 // |
|
513 // The amount of data that is available is specified in |
|
514 // CMMFBuffer::RequestSize(). |
|
515 // |
|
516 // Leaves on failure. |
|
517 // (other items were commented in a header). |
|
518 // ----------------------------------------------------------------------------- |
|
519 // |
|
520 void CMMFDevSoundAdaptation::CBody::RecordInitL() |
|
521 { |
|
522 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::RecordInitL *CD1*, CtxDevSound, DPLOCAL); |
|
523 DP_IN(); |
|
524 if(iMode==EMMFStateRecording) |
|
525 { |
|
526 User::LeaveIfError(iDevAudio->GetAudioControl()->ProcessInit()); |
|
527 } |
|
528 else |
|
529 { |
|
530 DP1(DLERR,"Current mode is not EMMFStateRecording! (iMode=%d)",iMode); |
|
531 User::Leave(KErrNotReady); |
|
532 } |
|
533 DP_OUT(); |
|
534 } |
|
535 |
|
536 // ----------------------------------------------------------------------------- |
|
537 // CMMFDevSoundAdaptation::CBody::PlayData |
|
538 // Plays data in the buffer at the current volume. The client should fill |
|
539 // the buffer with audio data before calling this method. The Observer gets |
|
540 // reference to buffer along with callback BufferToBeFilled(). When playing of |
|
541 // the audio sample is complete, successfully or otherwise, the method |
|
542 // PlayError() on observer is called. |
|
543 // (other items were commented in a header). |
|
544 // ----------------------------------------------------------------------------- |
|
545 // |
|
546 void CMMFDevSoundAdaptation::CBody::PlayData() |
|
547 { |
|
548 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::PlayData *CD1*, CtxDevSound, DPLOCAL); |
|
549 DP_IN(); |
|
550 |
|
551 if(iMode==EMMFStatePlaying) |
|
552 { |
|
553 iDevAudio->GetAudioControl()->ProcessData(); |
|
554 } |
|
555 else |
|
556 { |
|
557 DP1(DLERR,"Current mode is not EMMFStatePlaying! (iMode=%d)",iMode); |
|
558 } |
|
559 DP_OUT(); |
|
560 } |
|
561 |
|
562 // ----------------------------------------------------------------------------- |
|
563 // CMMFDevSoundAdaptation::CBody::RecordData |
|
564 // Contine the process of recording. Once the buffer is filled with recorded |
|
565 // data, the Observer gets reference to buffer along with callback |
|
566 // BufferToBeEmptied(). After processing the buffer (copying over to a |
|
567 // different buffer or writing to file) the client should call this |
|
568 // method to continue recording process. |
|
569 // (other items were commented in a header). |
|
570 // ----------------------------------------------------------------------------- |
|
571 // |
|
572 void CMMFDevSoundAdaptation::CBody::RecordData() |
|
573 { |
|
574 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::RecordData *CD1*, CtxDevSound, DPLOCAL); |
|
575 DP_IN(); |
|
576 if(iMode==EMMFStateRecording) |
|
577 { |
|
578 iDevAudio->GetAudioControl()->ProcessData(); |
|
579 } |
|
580 else |
|
581 { |
|
582 DP1(DLERR,"Current mode is not EMMFStateRecording! (iMode=%d)",iMode); |
|
583 } |
|
584 DP_OUT(); |
|
585 } |
|
586 |
|
587 // ----------------------------------------------------------------------------- |
|
588 // CMMFDevSoundAdaptation::CBody::Stop |
|
589 // Stops the ongoing operation (Play, Record, TonePlay) |
|
590 // (other items were commented in a header). |
|
591 // ----------------------------------------------------------------------------- |
|
592 // |
|
593 TBool CMMFDevSoundAdaptation::CBody::Stop() |
|
594 { |
|
595 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::Stop *CD1*, CtxDevSound, DPLOCAL); |
|
596 DP_IN(); |
|
597 TBool isCompleted = EFalse; |
|
598 |
|
599 // Need for sequences when calling stop and is already stopped |
|
600 TDevSoundAdaptorState state = iDevAudio->ActiveState(); |
|
601 if( (iMode != EMMFStateIdle) && |
|
602 (state == EDevSoundAdaptorActive_Active || |
|
603 state == EDevSoundAdaptorPaused_Primed ) ) |
|
604 { |
|
605 TInt err = iDevAudio->GetAudioControl()->Stop(); |
|
606 if (err != KErrNone) |
|
607 { |
|
608 isCompleted = ETrue; |
|
609 } |
|
610 } |
|
611 else |
|
612 { |
|
613 isCompleted = ETrue; |
|
614 } |
|
615 DP_OUT(); |
|
616 return isCompleted; |
|
617 } |
|
618 |
|
619 // ----------------------------------------------------------------------------- |
|
620 // CMMFDevSoundAdaptation::CBody::Pause |
|
621 // Temporarily Stops the ongoing operation (Play, Record, TonePlay) |
|
622 // (other items were commented in a header). |
|
623 // ----------------------------------------------------------------------------- |
|
624 // |
|
625 TInt CMMFDevSoundAdaptation::CBody::Pause() |
|
626 { |
|
627 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::Pause *CD1*, CtxDevSound, DPLOCAL); |
|
628 DP_IN(); |
|
629 |
|
630 TInt err = iDevAudio->GetAudioControl()->Pause(); |
|
631 DP0_RET(err, "%d"); |
|
632 } |
|
633 |
|
634 // ----------------------------------------------------------------------------- |
|
635 // CMMFDevSoundAdaptation::CBody::SamplesRecorded |
|
636 // Returns the sample recorded so far. |
|
637 // (other items were commented in a header). |
|
638 // ----------------------------------------------------------------------------- |
|
639 // |
|
640 TInt CMMFDevSoundAdaptation::CBody::SamplesRecorded() |
|
641 { |
|
642 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::SamplesRecorded *CD1*, CtxDevSound, DPLOCAL); |
|
643 DP_IN(); |
|
644 |
|
645 if(iMode==EMMFStateRecording) |
|
646 { |
|
647 DP_OUT(); |
|
648 return(iDevAudio->GetAudioControl()->GetSamples()); |
|
649 } |
|
650 else |
|
651 { |
|
652 DP1(DLERR,"Current mode is not EMMFStateRecording! (iMode=%d)",iMode); |
|
653 DP0_RET(0, "%d"); |
|
654 } |
|
655 } |
|
656 |
|
657 // ----------------------------------------------------------------------------- |
|
658 // CMMFDevSoundAdaptation::CBody::SamplesPlayed |
|
659 // Returns the sample played so far. |
|
660 // (other items were commented in a header). |
|
661 // ----------------------------------------------------------------------------- |
|
662 // |
|
663 TInt CMMFDevSoundAdaptation::CBody::SamplesPlayed() |
|
664 { |
|
665 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::SamplesPlayed *CD1*, CtxDevSound, DPLOCAL); |
|
666 DP_IN(); |
|
667 if(iMode==EMMFStatePlaying) |
|
668 { |
|
669 DP_OUT(); |
|
670 return(iDevAudio->GetAudioControl()->GetSamples()); |
|
671 } |
|
672 else |
|
673 { |
|
674 DP1(DLERR,"Current mode is not EMMFStatePlaying! (iMode=%d)",iMode); |
|
675 DP0_RET(0, "%d"); |
|
676 } |
|
677 } |
|
678 |
|
679 // ----------------------------------------------------------------------------- |
|
680 // CMMFDevSoundAdaptation::CBody::PlayToneL |
|
681 // Initializes audio device and start playing tone. Tone is played with |
|
682 // frequency and for duration specified. |
|
683 // Leaves on failure. |
|
684 // (other items were commented in a header). |
|
685 // ----------------------------------------------------------------------------- |
|
686 // |
|
687 void CMMFDevSoundAdaptation::CBody::PlayToneL( |
|
688 TInt aFrequency, |
|
689 const TTimeIntervalMicroSeconds& aDuration) |
|
690 { |
|
691 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::PlayToneL *CD1*, CtxDevSound, DPLOCAL); |
|
692 DP1_IN("aFrequency = %d", aFrequency); |
|
693 |
|
694 if(iMode==EMMFStateTonePlaying) |
|
695 { |
|
696 iToneData.SetType(TToneData::ESimple); |
|
697 iToneData.SetFrequencyOne(aFrequency); |
|
698 iToneData.SetDuration(aDuration); |
|
699 User::LeaveIfError(iDevAudio->GetAudioControl()->SetToneData(iToneData)); |
|
700 User::LeaveIfError(iDevAudio->GetAudioControl()->ProcessInit()); |
|
701 } |
|
702 else |
|
703 { |
|
704 DP1(DLERR,"Current mode is not EMMFStateTonePlaying! (iMode=%d)",iMode); |
|
705 User::Leave(KErrNotSupported); |
|
706 } |
|
707 |
|
708 DP_OUT(); |
|
709 } |
|
710 |
|
711 // ----------------------------------------------------------------------------- |
|
712 // CMMFDevSoundAdaptation::CBody::PlayDualToneL |
|
713 // Initializes audio device and start playing a dual tone. |
|
714 // The tone consists of two sine waves of different frequencies summed together |
|
715 // Dual Tone is played with specified frequencies and for specified duration. |
|
716 // (other items were commented in a header). |
|
717 // ----------------------------------------------------------------------------- |
|
718 // |
|
719 void CMMFDevSoundAdaptation::CBody::PlayDualToneL( |
|
720 TInt aFrequencyOne, |
|
721 TInt aFrequencyTwo, |
|
722 const TTimeIntervalMicroSeconds& aDuration) |
|
723 { |
|
724 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::PlayDualToneL *CD1*, CtxDevSound, DPLOCAL); |
|
725 DP2_IN("aFrequencyOne = %d, aFrequencyTwo=%d", aFrequencyOne, aFrequencyTwo); |
|
726 |
|
727 if(iMode==EMMFStateTonePlaying) |
|
728 { |
|
729 iToneData.SetType(TToneData::EDual); |
|
730 iToneData.SetFrequencyOne(aFrequencyOne); |
|
731 iToneData.SetFrequencyTwo(aFrequencyTwo); |
|
732 iToneData.SetDuration(aDuration); |
|
733 User::LeaveIfError(iDevAudio->GetAudioControl()->SetToneData(iToneData)); |
|
734 User::LeaveIfError(iDevAudio->GetAudioControl()->ProcessInit()); |
|
735 } |
|
736 else |
|
737 { |
|
738 DP1(DLERR,"Current mode is not EMMFStateTonePlaying! (iMode=%d)",iMode); |
|
739 User::Leave(KErrNotSupported); |
|
740 } |
|
741 DP_OUT(); |
|
742 } |
|
743 |
|
744 // ----------------------------------------------------------------------------- |
|
745 // CMMFDevSoundAdaptation::CBody::PlayDTMFStringL |
|
746 // Initializes audio device and start playing DTMF string aDTMFString. |
|
747 // Leaves on failure. |
|
748 // (other items were commented in a header). |
|
749 // ----------------------------------------------------------------------------- |
|
750 // |
|
751 void CMMFDevSoundAdaptation::CBody::PlayDTMFStringL(const TDesC& aDTMFString) |
|
752 { |
|
753 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::PlayDTMFStringL *CD1*, CtxDevSound, DPLOCAL); |
|
754 DP_IN(); |
|
755 |
|
756 if(iMode==EMMFStateTonePlaying) |
|
757 { |
|
758 iToneData.SetType(TToneData::EDtmfString); |
|
759 iToneData.SetDTMFString(const_cast<TDesC&>(aDTMFString)); |
|
760 User::LeaveIfError(iDevAudio->GetAudioControl()->SetToneData(iToneData)); |
|
761 User::LeaveIfError(iDevAudio->GetAudioControl()->ProcessInit()); |
|
762 } |
|
763 else |
|
764 { |
|
765 DP1(DLERR,"Current mode is not EMMFStateTonePlaying! (iMode=%d)",iMode); |
|
766 User::Leave(KErrNotSupported); |
|
767 } |
|
768 |
|
769 DP_OUT(); |
|
770 } |
|
771 |
|
772 // ----------------------------------------------------------------------------- |
|
773 // CMMFDevSoundAdaptation::CBody::PlayToneSequenceL |
|
774 // Initializes audio device and start playing tone sequence. |
|
775 // |
|
776 // Leaves on failure. |
|
777 // (other items were commented in a header). |
|
778 // ----------------------------------------------------------------------------- |
|
779 // |
|
780 void CMMFDevSoundAdaptation::CBody::PlayToneSequenceL(const TDesC8& aData) |
|
781 { |
|
782 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::PlayToneSequenceL *CD1*, CtxDevSound, DPLOCAL); |
|
783 DP_IN(); |
|
784 |
|
785 if(iMode==EMMFStateTonePlaying) |
|
786 { |
|
787 iToneData.SetType(TToneData::ESequence); |
|
788 iToneData.SetSequenceData(const_cast<TDesC8&>(aData)); |
|
789 User::LeaveIfError(iDevAudio->GetAudioControl()->SetToneData(iToneData)); |
|
790 User::LeaveIfError(iDevAudio->GetAudioControl()->ProcessInit()); |
|
791 } |
|
792 else |
|
793 { |
|
794 DP1(DLERR,"Current mode is not EMMFStateTonePlaying! (iMode=%d)",iMode); |
|
795 User::Leave(KErrNotSupported); |
|
796 } |
|
797 |
|
798 DP_OUT(); |
|
799 } |
|
800 |
|
801 // ----------------------------------------------------------------------------- |
|
802 // CMMFDevSoundAdaptation::CBody::PlayFixedSequenceL |
|
803 // Initializes audio device and start playing the specified pre-defined tone |
|
804 // sequence. |
|
805 // |
|
806 // Leaves on failure. |
|
807 // (other items were commented in a header). |
|
808 // ----------------------------------------------------------------------------- |
|
809 // |
|
810 void CMMFDevSoundAdaptation::CBody::PlayFixedSequenceL(TInt /*aSequenceNumber*/) |
|
811 { |
|
812 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::PlayFixedSequenceL *CD1*, CtxDevSound, DPLOCAL); |
|
813 DP_IN(); |
|
814 User::Leave(KErrNotSupported); |
|
815 DP_OUT(); |
|
816 } |
|
817 |
|
818 // ----------------------------------------------------------------------------- |
|
819 // CMMFDevSoundAdaptation::CBody::SetToneRepeats |
|
820 // Defines the number of times the audio is to be repeated during the tone |
|
821 // playback operation. A period of silence can follow each playing of tone. |
|
822 // The tone playing can be repeated indefinitely. |
|
823 // Supported only during tone playing. |
|
824 // (other items were commented in a header). |
|
825 // ----------------------------------------------------------------------------- |
|
826 // |
|
827 TInt CMMFDevSoundAdaptation::CBody::SetToneRepeats( |
|
828 TInt aRepeatCount, |
|
829 const TTimeIntervalMicroSeconds& aRepeatTrailingSilence) |
|
830 { |
|
831 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::SetToneRepeats *CD1*, CtxDevSound, DPLOCAL); |
|
832 DP1_IN("aRepeatCount = %d", aRepeatCount); |
|
833 |
|
834 TInt err = KErrNone; |
|
835 iToneData.SetRepeatCount(aRepeatCount); |
|
836 iToneData.SetRepeatTrailingSilence(aRepeatTrailingSilence); |
|
837 |
|
838 DP0_RET(err, "%d"); |
|
839 } |
|
840 |
|
841 // ----------------------------------------------------------------------------- |
|
842 // CMMFDevSoundAdaptation::CBody::SetDTMFLengths |
|
843 // Defines the duration of tone on, tone off and tone pause to be used during |
|
844 // the DTMF tone playback operation. |
|
845 // Supported only during tone playing. |
|
846 // (other items were commented in a header). |
|
847 // ----------------------------------------------------------------------------- |
|
848 // |
|
849 TInt CMMFDevSoundAdaptation::CBody::SetDTMFLengths( |
|
850 TTimeIntervalMicroSeconds32& aToneOnLength, |
|
851 TTimeIntervalMicroSeconds32& aToneOffLength, |
|
852 TTimeIntervalMicroSeconds32& aPauseLength) |
|
853 { |
|
854 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::SetDTMFLengths *CD1*, CtxDevSound, DPLOCAL); |
|
855 DP_IN(); |
|
856 |
|
857 TInt err = KErrNone; |
|
858 if (aToneOnLength.Int() < KMdaInfiniteDurationDTMFToneOnLength) |
|
859 { |
|
860 aToneOnLength = TTimeIntervalMicroSeconds32(0); |
|
861 } |
|
862 if (aToneOffLength.Int() < 0) |
|
863 { |
|
864 aToneOffLength = TTimeIntervalMicroSeconds32(0); |
|
865 } |
|
866 if (aPauseLength.Int() < 0) |
|
867 { |
|
868 aPauseLength = TTimeIntervalMicroSeconds32(0); |
|
869 } |
|
870 |
|
871 iToneData.SetDtmfLengths(aToneOnLength, aToneOffLength, aPauseLength); |
|
872 |
|
873 DP0_RET(err, "%d"); |
|
874 } |
|
875 |
|
876 // ----------------------------------------------------------------------------- |
|
877 // CMMFDevSoundAdaptation::CBody::SetVolumeRamp |
|
878 // Defines the period over which the volume level is to rise smoothly from |
|
879 // nothing to the normal volume level. |
|
880 // (other items were commented in a header). |
|
881 // ----------------------------------------------------------------------------- |
|
882 // |
|
883 TInt CMMFDevSoundAdaptation::CBody::SetVolumeRamp( |
|
884 const TTimeIntervalMicroSeconds& aRampDuration) |
|
885 { |
|
886 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::SetVolumeRamp *CD1*, CtxDevSound, DPLOCAL); |
|
887 DP_IN(); |
|
888 |
|
889 TInt err = iDevAudio->SetVolumeRamp(aRampDuration); |
|
890 DP0_RET(err, "%d"); |
|
891 } |
|
892 |
|
893 // ----------------------------------------------------------------------------- |
|
894 // CMMFDevSoundAdaptation::CBody::SetPrioritySettings |
|
895 // Defines the priority settings that should be used for this instance. |
|
896 // (other items were commented in a header). |
|
897 // ----------------------------------------------------------------------------- |
|
898 // |
|
899 TInt CMMFDevSoundAdaptation::CBody::SetPrioritySettings( |
|
900 const TMMFPrioritySettings& aPrioritySettings) |
|
901 { |
|
902 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::SetPrioritySettings *CD1*, CtxDevSound, DPLOCAL); |
|
903 DP_IN(); |
|
904 |
|
905 TInt err = iDevAudio->SetPrioritySettings(aPrioritySettings); |
|
906 if (err == KErrNone) |
|
907 { |
|
908 iPrioritySettings = aPrioritySettings; |
|
909 } |
|
910 DP0_RET(err, "%d"); |
|
911 } |
|
912 |
|
913 // ----------------------------------------------------------------------------- |
|
914 // CMMFDevSoundAdaptation::CBody::CustomInterface |
|
915 // @see sounddevice.h |
|
916 // (other items were commented in a header). |
|
917 // ----------------------------------------------------------------------------- |
|
918 // |
|
919 TAny* CMMFDevSoundAdaptation::CBody::CustomInterface(TUid aInterfaceId) |
|
920 { |
|
921 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::CustomInterface *CD1*, CtxDevSound, DPLOCAL); |
|
922 DP_IN(); |
|
923 if ( iDevAudio ) |
|
924 { |
|
925 DP_OUT(); |
|
926 return(iDevAudio->GetAudioControl()->CustomInterface(aInterfaceId)); |
|
927 } |
|
928 else |
|
929 { |
|
930 DP0_RET(NULL, "%d"); |
|
931 } |
|
932 } |
|
933 |
|
934 // ----------------------------------------------------------------------------- |
|
935 // CMMFDevSoundAdaptation::CBody::FixedSequenceCount |
|
936 // Returns the number of available pre-defined tone sequences. |
|
937 // This is the number of fixed sequence supported by DevSound by default. |
|
938 // (other items were commented in a header). |
|
939 // ----------------------------------------------------------------------------- |
|
940 // |
|
941 TInt CMMFDevSoundAdaptation::CBody::FixedSequenceCount() |
|
942 { |
|
943 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::FixedSequenceCount *CD1*, CtxDevSound, DPLOCAL); |
|
944 DP_IN(); |
|
945 DP0_RET(0, "%d"); |
|
946 } |
|
947 |
|
948 // ----------------------------------------------------------------------------- |
|
949 // CMMFDevSoundAdaptation::CBody::FixedSequenceName |
|
950 // Returns the name assigned to a specific pre-defined tone sequence. |
|
951 // This is the number of fixed sequence supported by DevSound by default. |
|
952 // The function raises a panic if sequence number specified invalid. |
|
953 // (other items were commented in a header). |
|
954 // ----------------------------------------------------------------------------- |
|
955 // |
|
956 const TDesC& CMMFDevSoundAdaptation::CBody::FixedSequenceName( |
|
957 TInt /*aSequenceNumber*/) |
|
958 { |
|
959 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::FixedSequenceName *CD1*, CtxDevSound, DPLOCAL); |
|
960 DP_IN(); |
|
961 DP0_RET(KNullDesC, ""); |
|
962 } |
|
963 |
|
964 // ----------------------------------------------------------------------------- |
|
965 // CMMFDevSoundAdaptation::CBody::GetSupportedInputDataTypesL |
|
966 // @see sounddevice.h |
|
967 // (other items were commented in a header). |
|
968 // ----------------------------------------------------------------------------- |
|
969 // |
|
970 void CMMFDevSoundAdaptation::CBody::GetSupportedInputDataTypesL( |
|
971 RArray<TFourCC>& aSupportedDataTypes, |
|
972 const TMMFPrioritySettings& /*aPrioritySettings*/) const |
|
973 { |
|
974 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::GetSupportedInputDataTypesL *CD1*, CtxDevSound, DPLOCAL); |
|
975 DP_IN(); |
|
976 //aPrioritySettings not used on ref DevSound |
|
977 //search for playing datatypes |
|
978 iDevAudio->DevSoundSupportedDataTypesL(aSupportedDataTypes, KDataForPlay); |
|
979 DP_OUT(); |
|
980 } |
|
981 |
|
982 // ----------------------------------------------------------------------------- |
|
983 // CMMFDevSoundAdaptation::CBody::GetSupportedOutputDataTypesL |
|
984 // @see sounddevice.h |
|
985 // (other items were commented in a header). |
|
986 // ----------------------------------------------------------------------------- |
|
987 // |
|
988 void CMMFDevSoundAdaptation::CBody::GetSupportedOutputDataTypesL( |
|
989 RArray<TFourCC>& aSupportedDataTypes, |
|
990 const TMMFPrioritySettings& /*aPrioritySettings*/) const |
|
991 { |
|
992 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::GetSupportedOutputDataTypesL *CD1*, CtxDevSound, DPLOCAL); |
|
993 DP_IN(); |
|
994 //aPrioritySettings not used on ref DevSound |
|
995 // search for recording datatypes |
|
996 iDevAudio->DevSoundSupportedDataTypesL(aSupportedDataTypes, KDataForRecord); |
|
997 DP_OUT(); |
|
998 } |
|
999 |
|
1000 // ----------------------------------------------------------------------------- |
|
1001 // CMMFDevSoundAdaptation::CBody::SetClientConfig |
|
1002 // Sets client capabilities for this instance of DevSound Adaptation. |
|
1003 // (other items were commented in a header). |
|
1004 // ----------------------------------------------------------------------------- |
|
1005 // |
|
1006 TInt CMMFDevSoundAdaptation::CBody::SetClientConfig( |
|
1007 const TProcessId& aActualProcessId, |
|
1008 const TProcessId& aProcessId) |
|
1009 { |
|
1010 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::SetClientConfig *CD1*, CtxDevSound, DPLOCAL); |
|
1011 DP_IN(); |
|
1012 |
|
1013 TInt err = iDevAudio->SetClientConfig(aActualProcessId, aProcessId); |
|
1014 DP0_RET(err, "%d"); |
|
1015 } |
|
1016 |
|
1017 TInt CMMFDevSoundAdaptation::CBody::SetClientConfig( |
|
1018 const TProcessId& aProcessId) |
|
1019 { |
|
1020 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::SetClientConfig *CD1*, CtxDevSound, DPLOCAL); |
|
1021 DP_IN(); |
|
1022 |
|
1023 TInt err = iDevAudio->SetClientConfig(aProcessId); |
|
1024 DP0_RET(err, "%d"); |
|
1025 } |
|
1026 |
|
1027 TBool CMMFDevSoundAdaptation::CBody::CloseDevSound() |
|
1028 { |
|
1029 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::CloseDevSound *CD1*, CtxDevSound, DPLOCAL); |
|
1030 DP_IN(); |
|
1031 DP_OUT(); |
|
1032 return iDevAudio->GetAudioControl()->DestroyChain(); |
|
1033 } |
|
1034 |
|
1035 // ----------------------------------------------------------------------------- |
|
1036 // CMMFDevSoundAdaptation::CBody::ProcessingFinishedReceived |
|
1037 // (other items were commented in a header). |
|
1038 // ----------------------------------------------------------------------------- |
|
1039 // |
|
1040 TInt CMMFDevSoundAdaptation::CBody::ProcessingFinishedReceived(TBool& asyncOperation) |
|
1041 { |
|
1042 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::ProcessingFinishedReceived *CD1*, CtxDevSound, DPLOCAL); |
|
1043 DP_IN(); |
|
1044 DP_OUT(); |
|
1045 return iDevAudio->GetAudioControl()->ProcessingFinishedReceived(asyncOperation); |
|
1046 } |
|
1047 |
|
1048 // ----------------------------------------------------------------------------- |
|
1049 // CMMFDevSoundAdaptation::CBody::ProcessingFinishedReceived |
|
1050 // (other items were commented in a header). |
|
1051 // ----------------------------------------------------------------------------- |
|
1052 // |
|
1053 TInt CMMFDevSoundAdaptation::CBody::ProcessingError(TBool& asyncOperation) |
|
1054 { |
|
1055 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::ProcessingError *CD1*, CtxDevSound, DPLOCAL); |
|
1056 DP_IN(); |
|
1057 DP_OUT(); |
|
1058 return iDevAudio->GetAudioControl()->ProcessingError(asyncOperation); |
|
1059 } |
|
1060 |
|
1061 // ----------------------------------------------------------------------------- |
|
1062 // CMMFDevSoundAdaptation::CBody::EmptyBuffers |
|
1063 // (other items were commented in a header). |
|
1064 // ----------------------------------------------------------------------------- |
|
1065 // |
|
1066 TInt CMMFDevSoundAdaptation::CBody::EmptyBuffers() |
|
1067 { |
|
1068 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::EmptyBuffers *CD1*, CtxDevSound, DPLOCAL); |
|
1069 DP_IN(); |
|
1070 TInt err(KErrNone); |
|
1071 // Empty buffers is only supported on playing |
|
1072 if (iMode == EMMFStateRecording || iMode == EMMFStateTonePlaying) |
|
1073 { |
|
1074 err = KErrNotSupported; |
|
1075 } |
|
1076 else if (!iDevAudio) |
|
1077 { |
|
1078 err = KErrNotReady; |
|
1079 } |
|
1080 else |
|
1081 { |
|
1082 TDevSoundAdaptorState state = iDevAudio->ActiveState(); |
|
1083 if (state == EDevSoundAdaptorActive_Active || |
|
1084 state == EDevSoundAdaptorPaused_Primed ) |
|
1085 { |
|
1086 err = iDevAudio->GetAudioControl()->RequestEmptyBuffers(); |
|
1087 } |
|
1088 else |
|
1089 { |
|
1090 err = KErrNotReady; |
|
1091 } |
|
1092 } |
|
1093 DP0_RET(err, "%d"); |
|
1094 } |
|
1095 |
|
1096 |
|
1097 |
|
1098 |
|
1099 // ----------------------------------------------------------------------------- |
|
1100 // CMMFDevSoundAdaptation::CBody::RegisterAsClient |
|
1101 // (other items were commented in a header). |
|
1102 // ----------------------------------------------------------------------------- |
|
1103 // |
|
1104 TInt CMMFDevSoundAdaptation::CBody::RegisterAsClient(TUid aEventType, const TDesC8& aNotificationRegistrationData) |
|
1105 { |
|
1106 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::RegisterAsClient *CD1*, CtxDevSound, DPLOCAL); |
|
1107 DP_IN(); |
|
1108 TInt err(KErrNone); |
|
1109 if (iDevAudio) |
|
1110 { |
|
1111 err = iDevAudio->RegisterAsClient(aEventType, aNotificationRegistrationData); |
|
1112 } |
|
1113 else |
|
1114 { |
|
1115 err = KErrNotReady; |
|
1116 } |
|
1117 DP0_RET(err, "%d"); |
|
1118 } |
|
1119 |
|
1120 |
|
1121 |
|
1122 |
|
1123 |
|
1124 // ----------------------------------------------------------------------------- |
|
1125 // CMMFDevSoundAdaptation::CBody::CancelRegisterAsClient |
|
1126 // (other items were commented in a header). |
|
1127 // ----------------------------------------------------------------------------- |
|
1128 // |
|
1129 TInt CMMFDevSoundAdaptation::CBody::CancelRegisterAsClient(TUid aEventType) |
|
1130 { |
|
1131 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::CancelRegisterAsClient *CD1*, CtxDevSound, DPLOCAL); |
|
1132 DP_IN(); |
|
1133 TInt err(KErrNone); |
|
1134 if (iDevAudio) |
|
1135 { |
|
1136 err = iDevAudio->CancelRegisterAsClient(aEventType); |
|
1137 } |
|
1138 else |
|
1139 { |
|
1140 err = KErrNotReady; |
|
1141 } |
|
1142 DP0_RET(err, "%d"); |
|
1143 } |
|
1144 |
|
1145 |
|
1146 |
|
1147 |
|
1148 // ----------------------------------------------------------------------------- |
|
1149 // CMMFDevSoundAdaptation::CBody::GetResourceNotificationData |
|
1150 // (other items were commented in a header). |
|
1151 // ----------------------------------------------------------------------------- |
|
1152 // |
|
1153 TInt CMMFDevSoundAdaptation::CBody::GetResourceNotificationData(TUid /*aEventType*/, TDes8& aNotificationData) |
|
1154 { |
|
1155 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::GetResourceNotificationData *CD1*, CtxDevSound, DPLOCAL); |
|
1156 DP_IN(); |
|
1157 TInt err(KErrNone); |
|
1158 if (iDevAudio) |
|
1159 { |
|
1160 TMMFTimeIntervalMicroSecondsPckg pckg = TTimeIntervalMicroSeconds(SamplesPlayed()); |
|
1161 aNotificationData.Copy(pckg); |
|
1162 } |
|
1163 else |
|
1164 { |
|
1165 err = KErrNotReady; |
|
1166 } |
|
1167 DP0_RET(err, "%d"); |
|
1168 } |
|
1169 |
|
1170 |
|
1171 |
|
1172 |
|
1173 // ----------------------------------------------------------------------------- |
|
1174 // CMMFDevSoundAdaptation::CBody::WillResumePlay |
|
1175 // (other items were commented in a header). |
|
1176 // ----------------------------------------------------------------------------- |
|
1177 // |
|
1178 TInt CMMFDevSoundAdaptation::CBody::WillResumePlay() |
|
1179 { |
|
1180 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::WillResumePlay *CD1*, CtxDevSound, DPLOCAL); |
|
1181 DP_IN(); |
|
1182 TInt err(KErrNone); |
|
1183 if (iDevAudio) |
|
1184 { |
|
1185 err = iDevAudio->WillResumePlay(); |
|
1186 } |
|
1187 else |
|
1188 { |
|
1189 err = KErrNotReady; |
|
1190 } |
|
1191 DP0_RET(err, "%d"); |
|
1192 } |
|
1193 |
|
1194 // CMMFDevSoundAdaptation::CBody::GetTimePlayed |
|
1195 // (other items were commented in a header). |
|
1196 // ----------------------------------------------------------------------------- |
|
1197 // |
|
1198 TInt CMMFDevSoundAdaptation::CBody::GetTimePlayed(TTimeIntervalMicroSeconds& aTime) |
|
1199 { |
|
1200 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::GetTimePlayed *CD1*, CtxDevSound, DPLOCAL); |
|
1201 DP_IN(); |
|
1202 |
|
1203 TInt err = iDevAudio->GetAudioControl()->GetTimePlayed(aTime); |
|
1204 DP0_RET(err, "%d"); |
|
1205 } |
|
1206 |
|
1207 // ----------------------------------------------------------------------------- |
|
1208 // CMMFDevSoundAdaptation::CBody::IsResumeSupported |
|
1209 // (other items were commented in a header). |
|
1210 // ----------------------------------------------------------------------------- |
|
1211 // |
|
1212 TBool CMMFDevSoundAdaptation::CBody::IsResumeSupported() |
|
1213 { |
|
1214 DP_CONTEXT(CMMFDevSoundAdaptation::IsResumeSupported *CD1*, CtxDevSound, DPLOCAL); |
|
1215 DP_IN(); |
|
1216 TBool isSupported = iDevAudio->IsResumeSupported(); |
|
1217 DP0_RET(isSupported, "%d"); |
|
1218 } |
|
1219 |
|
1220 // ----------------------------------------------------------------------------- |
|
1221 // CMMFDevSoundAdaptation::CBody::Resume |
|
1222 // (other items were commented in a header). |
|
1223 // ----------------------------------------------------------------------------- |
|
1224 // |
|
1225 TInt CMMFDevSoundAdaptation::CBody::Resume() |
|
1226 { |
|
1227 DP_CONTEXT(CMMFDevSoundAdaptation::Resume *CD1*, CtxDevSound, DPLOCAL); |
|
1228 DP_IN(); |
|
1229 TInt err = iDevAudio->GetAudioControl()->Resume(); |
|
1230 DP0_RET(err, "%d"); |
|
1231 } |
|
1232 |
|
1233 void CMMFDevSoundAdaptation::CBody::BufferErrorEvent() |
|
1234 { |
|
1235 ASSERT(iDevAudio); |
|
1236 iDevAudio->GetAudioControl()->BufferErrorEvent(); |
|
1237 } |
|
1238 |
|
1239 void CMMFDevSoundAdaptation::CBody::RollbackAdaptorActiveStateToBeforeCommit() |
|
1240 { |
|
1241 DP_CONTEXT(CMMFDevSoundAdaptation::CBody::RollbackAdaptorActiveStateToBeforeCommit *CD1*, CtxDevSound, DPLOCAL); |
|
1242 DP_IN(); |
|
1243 TDevSoundAdaptorState previousState = iDevAudio->PreviousState(); |
|
1244 // Set previous state to the active state set after state changing Commit call |
|
1245 iDevAudio->SetPreviousState(iDevAudio->ActiveState()); |
|
1246 // Set active state to the previous state set before state changing Commit call |
|
1247 iDevAudio->SetActiveState(previousState); |
|
1248 DP_OUT(); |
|
1249 } |