00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef CMEDIACLIENTAPPUI
00017 #define CMEDIACLIENTAPPUI
00018
00019 #include <eikappui.h>
00020 #include <eikmsg.h>
00021 #include <badesca.h>
00022
00023 #include "CMediaClientEngine.h"
00024
00025 class CMediaClientView;
00026 class CAudioStreamSource;
00027 class CAudioStreamSourceWithQueue;
00028
00032 class CMediaClientAppUi : public CEikAppUi, public MExEngineObserver
00033 {
00034 public:
00036 void ConstructL();
00038 ~CMediaClientAppUi();
00045 static TInt DoExit(TAny* aUI);
00046
00047 private:
00050 void HandleCommandL(TInt aCommand);
00055 void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
00058 CMediaClientEngine& MediaClientEngine() const;
00060 void ToneDialogL();
00062 void PlayFileDialogL();
00064 void RecordFileDialogL();
00066 void FileMetaDataL();
00068 void DisplayMetaDataL();
00070 void ConvertFileDialogL();
00071
00072
00076 void HandleEngineState(CMediaClientEngine::TState aState, TInt aError);
00077
00079 void StreamSourceCleanUp();
00080
00081 private:
00083 CMediaClientView* iAppView;
00085 TFileName iFileName;
00087 CAudioStreamSource* iAudioStreamSource;
00089 CAudioStreamSourceWithQueue* iAudioStreamSourceWithQueue;
00091 RMetaDataArray iMetaData;
00093 CMediaClientEngine::TState iState;
00095 CAsyncCallBack* iExitCallBack;
00097 TFormatOptions iFormatOptions;
00099 TRecordFormatOptions iRecordFormatOptions;
00101 TBuf<5> iTargetType;
00102 };
00103
00104
00105 #include <eikdialg.h>
00106
00108 class CToneDialog: public CEikDialog
00109 {
00110 public:
00115 static TBool RunDlgLD(TInt& aFrequency, TTimeIntervalMicroSeconds& aDuration);
00116
00117 private:
00121 CToneDialog(TInt& aFrequency, TTimeIntervalMicroSeconds& aDuration);
00125 TBool OkToExitL(TInt aKeycode);
00126
00127 private:
00129 TInt& iFrequency;
00131 TTimeIntervalMicroSeconds& iDuration;
00132 };
00133
00134
00136 class CRecordDialog: public CEikDialog
00137 {
00138 public:
00141 static TBool RunDlgLD(
00142 TFileName& aFileName, CMediaClientEngine& aMediaClientEngine,
00143 TRecordFormatOptions& aFormatOptions);
00144 ~CRecordDialog();
00145
00146 private:
00147
00148 CRecordDialog(TFileName& aFileName, CMediaClientEngine& aMediaClientEngine,
00149 TRecordFormatOptions& aFormatOptions);
00150
00151 TBool OkToExitL(TInt aKeycode);
00152 void PreLayoutDynInitL();
00153 void HandleControlStateChangeL(TInt aControlId);
00154
00155 private:
00156 TFileName& iFileName;
00157 CMediaClientEngine& iMediaClientEngine;
00158
00159 TRecordFormatOptions& iRecordFormatOptions;
00160
00161 TInt iOptionsSetFor;
00162 };
00163
00164
00166 class CConverterDialog: public CEikDialog
00167 {
00168 public:
00171 static TBool RunDlgLD(
00172
00173 const TFileName& aFileName, CMediaClientEngine& aMediaClientEngine,
00174 TFormatOptions& aFormatOptions, TDes& aTargetType);
00175 ~CConverterDialog();
00176
00177 private:
00178
00179 CConverterDialog(const TFileName& aFileName, CMediaClientEngine& aMediaClientEngine,
00180 TFormatOptions& aFormatOptions, TDes& aTargetType);
00181
00182 TBool OkToExitL(TInt aKeycode);
00183 void PreLayoutDynInitL();
00184 void HandleControlStateChangeL(TInt aControlId);
00185
00186 private:
00187
00188 const TFileName& iFileName;
00189 CMediaClientEngine& iMediaClientEngine;
00190
00191 TFormatOptions& iFormatOptions;
00192
00193 TDes& iTargetType;
00194
00195 TInt iOptionsSetFor;
00196 };
00197
00198
00199
00200 class CFormatOptionsDialog: public CEikDialog
00201 {
00202 public:
00203 static TBool RunDlgLD(const TFileName& aInputFile, const TDesC& aTargetType,
00204 CMediaClientEngine& aMediaClientEngine, TFormatOptions& aFormatOptions);
00205 ~CFormatOptionsDialog();
00206
00207 protected:
00208
00209 CFormatOptionsDialog(const TFileName& aInputFile, const TDesC& aTargetType,
00210 CMediaClientEngine& aMediaClientEngine, TFormatOptions& aFormatOptions);
00211 void ConstructL();
00212 void TUintChoiceListL(TInt aResourceId, const RArray<TUint>& aArray);
00213
00214 TBool OkToExitL(TInt aKeycode);
00215 void PreLayoutDynInitL();
00216
00217 protected:
00218
00219 const TFileName& iFileName;
00220 const TDesC& iTargetType;
00221 CMediaClientEngine& iMediaClientEngine;
00222
00223 TFormatOptions& iFormatOptions;
00224
00225
00226 RArray<TFourCC> iDataTypes;
00227 RArray<TUint> iBitRates;
00228 RArray<TUint> iSampleRates;
00229 RArray<TUint> iChannels;
00230 };
00231
00232
00233 class CRecordFormatOptionsDialog: public CFormatOptionsDialog
00234 {
00235 public:
00236 static TBool RunDlgLD(const TDesC& aTargetType,
00237 CMediaClientEngine& aMediaClientEngine, TRecordFormatOptions& aFormatOptions);
00238 ~CRecordFormatOptionsDialog();
00239
00240 private:
00241
00242 CRecordFormatOptionsDialog(const TDesC& aTargetType,
00243 CMediaClientEngine& aMediaClientEngine, TRecordFormatOptions& aFormatOptions);
00244 void ConstructL();
00245
00246 TBool OkToExitL(TInt aKeycode);
00247 void PreLayoutDynInitL();
00248
00249 private:
00250
00251 TInt iMaxGain;
00252
00253 TRecordFormatOptions& iRecordFormatOptions;
00254
00255 TBuf<1> iBuf;
00256 };
00257
00258
00260 const TInt KSliceSize = 4096;
00262 typedef TBuf8<KSliceSize> TSoundSlice;
00263
00267 class CAudioStreamSource: public CActive
00268 {
00269 public:
00270
00276 static CAudioStreamSource* NewL(RFs& aFs,CMediaClientEngine& aEngine);
00277
00279 void Next();
00280
00283 ~CAudioStreamSource();
00284
00285 private:
00288 void ConstructL();
00289
00294 CAudioStreamSource(RFs& aFs, CMediaClientEngine& aEngine);
00295
00298 void RunL();
00301 void DoCancel();
00302
00303 private:
00305 RFile iSourceFile;
00307 RFs& iFs;
00309 CMediaClientEngine& iEngine;
00311 TSoundSlice iBuf;
00312 };
00313
00320 class CSoundSlice: public CBase
00321 {
00322 public:
00323
00330 static CSoundSlice* NewL(const TDesC8& aData);
00334 ~CSoundSlice();
00335 const TDesC8& GetData();
00336 public:
00337 static const TInt iOffset;
00338 private:
00343 CSoundSlice();
00348 void ConstructL(const TDesC8& aData);
00349 private:
00351 HBufC8* iData;
00353 TSglQueLink iLink;
00354 };
00355
00356
00362 class CAudioStreamSourceWithQueue: public CTimer
00363 {
00364 public: static CAudioStreamSourceWithQueue* NewL(RFs& aFs,CMediaClientEngine& aEngine);
00374 ~CAudioStreamSourceWithQueue();
00378 void Next();
00379
00384 void RemoveFromQueue();
00385
00386 private:
00392 CAudioStreamSourceWithQueue(RFs& aFs, CMediaClientEngine& aEngine);
00396 void ConstructL();
00400 void RunL();
00404 void DoCancel();
00405
00406 private:
00408 RFile iSourceFile;
00410 RFs& iFs;
00412 CMediaClientEngine& iEngine;
00414 TSoundSlice iBuf;
00416 TSglQue<CSoundSlice> iQueue;
00418 TSglQueIter<CSoundSlice> iQueueIter;
00419 };
00420
00421
00422 #endif // CMEDIACLIENTAPPUI