|
1 /* |
|
2 * Copyright (c) 2004-2008 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: Provides static configuration functions for different codecs |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 |
|
20 #ifndef MCCCODECCONFIGURATOR_H |
|
21 #define MCCCODECCONFIGURATOR_H |
|
22 |
|
23 // INCLUDES |
|
24 #include <e32base.h> |
|
25 #include "mccsymstreambase.h" |
|
26 |
|
27 // FORWARD DECLARATIONS |
|
28 class MMMFAudioInput; |
|
29 class MMMFAudioOutput; |
|
30 class MDataSink; |
|
31 class MDataSource; |
|
32 class TMccCodecInfo; |
|
33 class CMMFFormatEncode; |
|
34 class CMMFFormatDecode; |
|
35 class CMccVideoSource; |
|
36 class CMccVideoSink; |
|
37 class CPayloadFormatWrite; |
|
38 class CPayloadFormatRead; |
|
39 class TMccFileSourceSetting; |
|
40 class CMccRtpMediaClock; |
|
41 class CMMFDevSound; |
|
42 class CMccFileSink; |
|
43 |
|
44 // CLASS DECLARATION |
|
45 |
|
46 /** |
|
47 * Mcc Codec configuration static methods declaration |
|
48 * |
|
49 * @lib Mccsubthread.lib |
|
50 * @since Series 60 3.0 |
|
51 */ |
|
52 NONSHARABLE_CLASS( MccCodecConfigurator ) |
|
53 { |
|
54 public: // New functions |
|
55 |
|
56 /** |
|
57 * Generic codec configuration function. |
|
58 * @since Series 60 3.0 |
|
59 * @param aCodec Codec information |
|
60 * @return void |
|
61 */ |
|
62 static void ConfigureCodecL( MDataSource& aDatasource, |
|
63 MDataSink& aDatasink, |
|
64 const TMccCodecInfo& aCodec, |
|
65 CMccRtpMediaClock& aClock, |
|
66 CMccSymStreamBase::TCodecState aCodecState, |
|
67 MDataSink* aAssociatedDatasink = 0 ); |
|
68 |
|
69 /** |
|
70 * Changes the current encoder bitrate |
|
71 * @since Series 60 3.0 |
|
72 * @param aCodec Codec info |
|
73 * @param aBitrate New bitrate |
|
74 * @param aSounddevice Reference to DevSound |
|
75 * @return void |
|
76 */ |
|
77 static void ChangeBitrateL( const TMccCodecInfo& aCodec, |
|
78 TUint aBitrate, |
|
79 CMMFDevSound& aSounddevice ); |
|
80 |
|
81 /** |
|
82 * Gets default values of codec |
|
83 */ |
|
84 static void GetCodecDefaultsL( const TUid aType, |
|
85 TDes8& aParam, |
|
86 TMccCodecInfo& aCodec ); |
|
87 |
|
88 /** |
|
89 * Checks whether codec is iLBC and if bitrate change needs a |
|
90 * codec stop/resume in order for the reconfiguration to succeed. |
|
91 * @since S60 v3.2 |
|
92 * @param aOrigBitrate Original bitrate |
|
93 * @param aRequBitrate Requested bitrate |
|
94 * @param aCodec FourCC code of the codec |
|
95 * @return TBool ETrue if stop/resume is needed for bitrate change |
|
96 * and codec is iLBC |
|
97 */ |
|
98 static TBool IlbcNeedsStopResume( TInt aOrigBitrate, |
|
99 TInt aRequBitrate, const TFourCC& aCodec ); |
|
100 |
|
101 private: |
|
102 |
|
103 /** |
|
104 * Configures a codec that is used for uplink/recording |
|
105 * @since Series 60 3.0 |
|
106 * @param aRecordDevice MMF Recording device |
|
107 * @param aFormatter Encoder for record data |
|
108 * @param aCodec Codec parameters |
|
109 * @param aCodecState |
|
110 * @return void |
|
111 */ |
|
112 static void DoConfigureLiveAudioUplinkStreamL( |
|
113 MMMFAudioInput& aRecordDevice, |
|
114 CPayloadFormatWrite& aFormatter, |
|
115 const TMccCodecInfo& aCodec, |
|
116 CMccRtpMediaClock& aClock, |
|
117 CMccSymStreamBase::TCodecState aCodecState ); |
|
118 |
|
119 /** |
|
120 * Configures a codec that is used for downlink/playback |
|
121 * @since Series 60 3.0 |
|
122 * @param aPlayDevice MMF Playback device |
|
123 * @param aFormatter Decoder for playback data |
|
124 * @param aCodec Codec parameters |
|
125 * @param aCodecState |
|
126 * @return void |
|
127 */ |
|
128 static void DoConfigureLiveAudioDownlinkStreamL( |
|
129 MMMFAudioOutput& aPlayDevice, |
|
130 CPayloadFormatRead& aFormatter, |
|
131 const TMccCodecInfo& aCodec, |
|
132 CMccSymStreamBase::TCodecState aCodecState ); |
|
133 |
|
134 /** |
|
135 * Configures a codec that is used for video downlink |
|
136 * @since Series 60 3.0 |
|
137 * @param aPlayDevice MMF Playback device |
|
138 * @param aFormatter Decoder for playback data |
|
139 * @param aCodec Codec parameters |
|
140 * @return void |
|
141 */ |
|
142 static void DoConfigureLiveVideoDownlinkStreamL( |
|
143 MDataSink* aDataSink, |
|
144 CPayloadFormatRead& aFormatter, |
|
145 const TMccCodecInfo& aCodec ); |
|
146 |
|
147 /** |
|
148 * Configures a codec for display sink |
|
149 * @since Series 60 3.0 |
|
150 * @param aCodec Codec parameters |
|
151 * @param aDatasink |
|
152 * @return void |
|
153 */ |
|
154 static void DoConfigureDisplayL( |
|
155 const TMccCodecInfo& aCodec, |
|
156 MDataSink* aDatasink ); |
|
157 |
|
158 /** |
|
159 * Configures a codec that is used for uplink video from clip |
|
160 * @since Series 60 3.0 |
|
161 * @param aFormatter Encoder for record data |
|
162 * @param aCodec Codec parameters |
|
163 * @param aAssociatedSink |
|
164 * @return void |
|
165 */ |
|
166 static void DoConfigureClipUplinkStreamL( |
|
167 CPayloadFormatWrite& aFormatter, |
|
168 const TMccCodecInfo& aCodec, |
|
169 MDataSink* aAssociatedSink, |
|
170 CMccRtpMediaClock& aClock ); |
|
171 |
|
172 /** |
|
173 * Configures a codec that is used for uplink live video |
|
174 * @since Series 60 3.0 |
|
175 * @param aFormatter Encoder for record data |
|
176 * @param aCodec Codec parameters |
|
177 * @param aAssociatedSink |
|
178 * @return void |
|
179 */ |
|
180 static void DoConfigureLiveVideoUplinkStreamL( |
|
181 CMccVideoSource& aDataSource, |
|
182 CPayloadFormatWrite& aFormatter, |
|
183 const TMccCodecInfo& aCodec, |
|
184 MDataSink* aAssociatedSink, |
|
185 CMccRtpMediaClock& aClock ); |
|
186 |
|
187 /** |
|
188 * Configures the uplink AMR codec |
|
189 * @since Series 60 3.0 |
|
190 * @param [input] aPlaybackDev MMF Audio datasink |
|
191 * @param [input] aCodec Codec info |
|
192 * @return void |
|
193 */ |
|
194 static void DoConfigureAmrL( MMMFAudioOutput& aPlaybackDev, |
|
195 const TMccCodecInfo& ); |
|
196 |
|
197 /** |
|
198 * Configures the downlink AMR codec |
|
199 * @since Series 60 3.0 |
|
200 * @param [input] aRecordDev MMF Audio datasource |
|
201 * @param [input] aCodec Codec info |
|
202 * @return void |
|
203 */ |
|
204 static void DoConfigureAmrL( MMMFAudioInput& aRecordDev, |
|
205 const TMccCodecInfo& aCodec ); |
|
206 |
|
207 /** |
|
208 * Configures the uplink G.711 codec |
|
209 * @since Series 60 3.0 |
|
210 * @param [input] aDatasink MMF Audio datasink |
|
211 * @param [input] aCodec Codec parameters |
|
212 * @param aCodecState |
|
213 * @return void |
|
214 */ |
|
215 static void DoConfigureG711L( MMMFAudioOutput& aPlaybackDev, |
|
216 const TMccCodecInfo& aCodec, |
|
217 CMccSymStreamBase::TCodecState aCodecState ); |
|
218 |
|
219 /** |
|
220 * Configures the downlink G.711 codec |
|
221 * @since Series 60 3.0 |
|
222 * @param [input] aDatasource MMF Audio datasource |
|
223 * @param [input] aCodec Codec parameters |
|
224 * @param aCodecState |
|
225 * @return void |
|
226 */ |
|
227 static void DoConfigureG711L( MMMFAudioInput& aRecordDev, |
|
228 const TMccCodecInfo& aCodec, |
|
229 CMccSymStreamBase::TCodecState aCodecState ); |
|
230 |
|
231 /** |
|
232 * Configures the uplink G.729 codec |
|
233 * @since Series 60 3.0 |
|
234 * @param aDatasink MMF Audio datasink |
|
235 * @param aBitrate Bitrate for the codec |
|
236 * @return void |
|
237 */ |
|
238 static void DoConfigureG729( MMMFAudioOutput& aPlaybackDev ); |
|
239 |
|
240 /** |
|
241 * Configures the downlink G.729 codec |
|
242 * @since Series 60 3.0 |
|
243 * @param [input] aDatasource MMF Audio datasource |
|
244 * @param [input] aEnableCng Is comfort noise generation activated |
|
245 * @return void |
|
246 */ |
|
247 static void DoConfigureG729L( MMMFAudioInput& aRecordDev, |
|
248 TBool aEnableCng ); |
|
249 |
|
250 /** |
|
251 * Configures the uplink iLBC codec |
|
252 * @since Series 60 3.0 |
|
253 * @param aDatasink MMF Audio datasink |
|
254 * @param aCodec Codec parameters |
|
255 * @param aCodecState |
|
256 * @return void |
|
257 */ |
|
258 static void DoConfigureIlbcL( MMMFAudioOutput& aPlaybackDev, |
|
259 const TMccCodecInfo& aCodec, |
|
260 CMccSymStreamBase::TCodecState aCodecState ); |
|
261 |
|
262 /** |
|
263 * Configures the downlink iLBC codec |
|
264 * @since Series 60 3.0 |
|
265 * @param aDatasource MMF Audio datasource |
|
266 * @param aCodec Codec parameters |
|
267 * @param aCodecState |
|
268 * @return void |
|
269 */ |
|
270 static void DoConfigureIlbcL( MMMFAudioInput& aRecordDev, |
|
271 const TMccCodecInfo& aCodec, |
|
272 CMccSymStreamBase::TCodecState aCodecState ); |
|
273 |
|
274 /** |
|
275 * Configures the camera source |
|
276 * @since Series 60 3.0 |
|
277 * @param [input] aVideoSource source to be configured |
|
278 * @param [input] aCodec Codec parameters |
|
279 * @return void |
|
280 */ |
|
281 static void DoConfigureCameraL( CMccVideoSource& aVideoSource, |
|
282 const TMccCodecInfo& aCodec ); |
|
283 |
|
284 |
|
285 /** |
|
286 * Configures the file sink |
|
287 * @since Series 60 3.0 |
|
288 * @param [input] aFileSink sink to be configured |
|
289 * @param [input] aCodec Codec parameters |
|
290 * @return void |
|
291 */ |
|
292 static void DoConfigureFileSinkL( CMccFileSink& aFileSink, |
|
293 const TMccCodecInfo& aCodec ); |
|
294 |
|
295 /** |
|
296 * Configures a DTMF mediaformat. |
|
297 * |
|
298 * @since S60 3.0 |
|
299 * @param aPayloadDecoder Decoder for DTMF payload |
|
300 * @param aCodec Mediaformat parameters |
|
301 * @return void |
|
302 */ |
|
303 static void DoConfigureDtmfFormatL( |
|
304 CPayloadFormatRead& aPayloadDecoder, |
|
305 const TMccCodecInfo& aCodec ); |
|
306 |
|
307 /** |
|
308 * Configures a DTMF mediaformat. |
|
309 * |
|
310 * @since S60 3.0 |
|
311 * @param aPayloadEncoder Encoder for DTMF payload |
|
312 * @param aCodec Mediaformat parameters |
|
313 * @param aClock Mediaclock for timestamp synchronization |
|
314 * @return void |
|
315 */ |
|
316 static void DoConfigureDtmfFormatL( |
|
317 CPayloadFormatWrite& aPayloadEncoder, |
|
318 const TMccCodecInfo& aCodec, |
|
319 CMccRtpMediaClock& aClock ); |
|
320 |
|
321 /** |
|
322 * Gets configures of the camera source |
|
323 */ |
|
324 static void DoGetCameraConfigurationL( const TMccCodecInfo& aCodec, |
|
325 const TDesC8& aParam ); |
|
326 |
|
327 /** |
|
328 * Gets settings of the clip source |
|
329 */ |
|
330 static void DoGetClipConfigurationL( TDes8& aParam ); |
|
331 |
|
332 /** |
|
333 * Converts a "boolean" setting parameter to a real Symbian style |
|
334 * boolean. |
|
335 * @since Series 60 3.0 |
|
336 * @param aParam Boolean parameter to convert |
|
337 * @return TBool Converted parameter |
|
338 */ |
|
339 static TBool ConvertBoolean( TBool aParam ); |
|
340 |
|
341 /** |
|
342 * Checks whether bitrate is supported |
|
343 */ |
|
344 static TBool IsSupportedAmrNbBitrate( TInt aBitrate ); |
|
345 |
|
346 /** |
|
347 * Checks whether bitrate is supported |
|
348 */ |
|
349 static TBool IsSupportedAmrWbBitrate( TInt aBitrate ); |
|
350 |
|
351 static void PassPrerollFromSinkToSourceL(MDataSink* aDataSink, MDataSource* aDataSource); |
|
352 |
|
353 |
|
354 private: // Friend classes |
|
355 #if defined( TEST_EUNIT ) |
|
356 friend class UT_CMccCodecConfigurator; |
|
357 #endif |
|
358 }; |
|
359 |
|
360 #endif // MCCCODECCONFIGURATOR_H |
|
361 |
|
362 // End of File |