00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef MMCCCODECINFORMATION_H
00020 #define MMCCCODECINFORMATION_H
00021
00022 #include <e32base.h>
00023 #include <e32des8.h>
00024 #include <e32svr.h>
00025 #include <mmf\common\mmfcontroller.h>
00026
00027 class TMccCodecInfo;
00028
00029
00030 _LIT8( KPCMUSdpName, "PCMU" );
00031 _LIT8( KPCMASdpName, "PCMA" );
00032 _LIT8( KAMRSdpName, "AMR" );
00033 _LIT8( KAMRWbSdpName, "AMR-WB" );
00034 _LIT8( KILBCSdpName, "iLBC" );
00035 _LIT8( KG729SdpName, "G729" );
00036 _LIT8( KTelephoneEvent, "telephone-event" );
00037 _LIT8( KRedSdpName, "red" );
00038 _LIT8( KCnSdpName, "CN" );
00039 _LIT8( KH263SdpName, "H263" );
00040 _LIT8( KH2631998SdpName, "H263-1998" );
00041 _LIT8( KH2632000SdpName, "H263-2000" );
00042 _LIT8( KAVCSdpName, "H264" );
00043 _LIT8( KAACSdpName, "AAC" );
00044 _LIT8( KIlbcFmtp, "mode=" );
00045 _LIT8( KSemicolonSpace, "; " );
00046 _LIT8( KCommaSign, "," );
00047
00048 const TInt KPTimeFactor = 1000;
00049
00050
00051 const TInt KMaxSdpNameLength = 20;
00052 const TUint8 KMaxPacketrate = 10;
00053 const TInt KMaxFmtpLen( 120 );
00054 const TInt KMaxKeepAliveDataLen( 161 );
00055
00056
00057 const TUint8 KMaxPayloadType = 127;
00058 const TUint8 KMinDynamicPT = 96;
00059 const TUint8 KPayloadTypeUndefined = 128;
00060
00061
00062 const TUint8 KDefaultAmrNbPT = 96;
00063 const TUint8 KDefaultIlbcPT = 97;
00064 const TUint8 KDefaultDtmfPT = 98;
00065 const TUint8 KDefaultRedPT = 99;
00066 const TUint8 KDefaultAmrWbPT = 100;
00067
00068
00069 const TUint8 KPcmuPayloadType = 0;
00070 const TUint8 KPcmaPayloadType = 8;
00071 const TUint8 KG729PayloadType = 18;
00072 const TUint8 KCnPayloadType = 13;
00073 const TUint8 KCnPayloadTypeReserved = 19;
00074
00075
00076 const TUint KMinPtime = 10;
00077 const TUint KDefaultPtime = 20;
00078 const TUint KMaxPtime = 200;
00079
00080
00081 const TUint KMaxGenRedCount = 1;
00082
00083
00084 const TInt KMaxConfigKeyLen = 100;
00085
00086
00087
00088
00089 const TUint32 KMccFourCCIdAMRNB = 0x524d4120;
00090
00091
00092 const TUint32 KMccFourCCIdAMRWB = 0x42574120;
00093
00094
00095 const TUint32 KMccFourCCIdG711 = 0x31313747;
00096
00097
00098 const TUint32 KMccFourCCIdG729 = 0x39323747;
00099
00100
00101 const TUint32 KMccFourCCIdILBC = 0x43424c49;
00102
00103
00104 const TUint32 KMccFourCCIdDTMF = 0x464d5444;
00105
00106
00107 const TUint32 KMccFourCCIdH263 = 0x461A1B1C;
00108
00109
00110 const TUint32 KMccFourCCIdAVC = 0x461A1BDD;
00111
00112
00113 const TUint32 KMccFourCCIdRed = 0x4DDDDDDD;
00114
00115
00116 const TUint32 KMccFourCCIdCN = 0x4DDDDDDE;
00117
00121 typedef TUint TCodecMode;
00122
00123 const TUint ENothing = 1;
00124 const TUint EPCMU = 2;
00125 const TUint EPCMA = 3;
00126 const TUint EBandwidthEfficient = 4;
00127 const TUint EOctetAligned = 5;
00128 const TUint EDTMFModeEvent = 6;
00129 const TUint EDTMFModeInband = 7;
00130 const TUint EDTMFModeTone = 8;
00131 const TUint EDTMFModeRedEvents = 9;
00132
00136 typedef TUint TAlgoUsed;
00137
00138 const TUint ENoAlgoUsed = 1;
00139 const TUint EGenRedUsed = 2;
00140 const TUint EAmrFecUsed = 3;
00141
00149 class CMccCodecInformation : public CBase
00150 {
00151 public:
00152
00156 virtual ~CMccCodecInformation();
00157
00158 protected:
00159
00163 CMccCodecInformation();
00164
00165 public:
00166
00173 virtual CMccCodecInformation* CloneDefaultsL() = 0;
00174
00181 virtual CMccCodecInformation* CloneDetailedL() = 0;
00182
00189 virtual TBool RequireSignalling(
00190 const CMccCodecInformation& aCandidate ) const;
00191
00192 public:
00193
00197 virtual void SetValues( TMccCodecInfo codecInfo );
00198
00202 virtual void GetValues( TMccCodecInfo& codecInfo ) const;
00203
00209 virtual TUid Type() const;
00210
00219 virtual TInt EnableVAD( TBool aEnableVAD ) = 0;
00220
00229 virtual TInt SetBitrate( TUint aBitrate ) = 0;
00230
00238 virtual TInt SetSamplingFreq( TUint32 aSamplingFreq ) = 0;
00239
00247 virtual TInt SetSdpName( const TDesC8& aSdpName ) = 0;
00248
00255 virtual TInt SetPayloadType( TUint8 aPayloadType ) = 0;
00256
00265 virtual TInt SetCodecMode( TCodecMode aCodecMode ) = 0;
00266
00274 virtual TInt SetAllowedBitrates( TUint aBitrateMask );
00275
00282 virtual TInt SetPTime( TUint aPTime ) = 0;
00283
00290 virtual TInt SetMaxPTime( TUint aMaxPTime ) = 0;
00291
00299 virtual TInt SetJitterBufBufferLength( TUint aJitterBufBufferLength );
00300
00309 virtual TInt SetJitterBufThreshold( TUint aJitterBufThreshold );
00310
00317 virtual TInt SetJitterBufInactivityTimeOut(
00318 TUint aJitterBufInactivityTimeOut );
00319
00326 virtual TInt SetMaxBitrate( TUint aMaxBitrate );
00327
00334 virtual TInt SetAverageBitrate( TUint aAverageBitrate );
00335
00342 virtual TInt SetFramerate( TReal aFramerate );
00343
00350 virtual TInt SetFrameHeight( TUint aFrameHeight );
00351
00358 virtual TInt SetFrameWidth( TUint aFrameWidth );
00359
00366 virtual TInt SetAlgo( TAlgoUsed aAlgo );
00367
00374 virtual TInt SetRedCount( TUint aRedCount );
00375
00382 virtual TInt SetRedundancyPT( TUint8 aRedPT );
00383
00390 virtual void SetPriority( TInt aPriority );
00391
00398 virtual void SetPriorityPreference( TInt aPreference );
00399
00406 virtual TInt SetKeepAliveTimer( TUint8 aTimerValue );
00407
00414 virtual TInt SetKeepAlivePT( TUint8 aKeepAlivePT );
00415
00422 virtual TInt SetKeepAliveData( const TDesC8& aData );
00423
00433 virtual TInt SetComfortNoiseGeneration( TUint8 aComfortNoisePT );
00434
00442 virtual TInt SetChannels( TInt aNumOfChannels );
00443
00450 virtual TInt SetMaxRed( TInt aMaxRed );
00451
00457 virtual void SetConfigKeyL( const TDesC8& aConfigKey );
00458
00465 virtual void SetPreferredEncodingDecodingDevice(
00466 TUid aEncodingDecodingDevice );
00467
00468 public:
00469
00475 virtual TBool VAD() const;
00476
00482 virtual TUint Bitrate() const;
00483
00489 virtual TUint AllowedBitrates() const;
00490
00496 virtual TUint32 SamplingFreq() const;
00497
00503 virtual const TDesC8& SdpName() const;
00504
00510 virtual TUint8 PayloadType() const;
00511
00517 virtual TCodecMode CodecMode() const;
00518
00524 virtual TInt PTime() const;
00525
00531 virtual TInt MaxPTime() const;
00532
00538 virtual TDesC8& GetFmtpL();
00539
00545 virtual TUint32 FourCC() const;
00546
00552 virtual TInt FrameTime() const;
00553
00559 virtual TInt FrameSize() const;
00560
00566 virtual TAlgoUsed Algo() const;
00567
00573 virtual TUint RedCount() const;
00574
00580 virtual TUint8 RedundancyPT() const;
00581
00587 virtual TUint JitterBufInactivityTimeOut() const;
00588
00594 virtual TUint JitterBufThreshold() const;
00595
00601 virtual TUint JitterBufBufferLength() const;
00602
00608 virtual TUint MaxBitrate() const;
00609
00615 virtual TUint AverageBitrate() const;
00616
00622 virtual TReal Framerate() const;
00623
00629 virtual TUint FrameHeight() const;
00630
00636 virtual TUint FrameWidth() const;
00637
00643 virtual TInt Priority() const;
00644
00650 virtual TInt PriorityPreference() const;
00651
00657 virtual TUint8 KeepAliveTimer() const;
00658
00664 virtual TUint8 KeepAlivePT() const;
00665
00671 virtual const TDesC8& KeepAliveData() const;
00672
00680 virtual TUint8 ComfortNoiseGeneration() const;
00681
00687 virtual TInt GetChannels( TInt& aNumOfChannels ) const;
00688
00694 virtual TInt MaxRed() const;
00695
00701 virtual void RedPayloadsL( RArray<TUint>& aRedPayloads ) const;
00702
00708 virtual HBufC8* ConfigKeyL() const;
00709
00716 virtual TUid PreferredEncodingDecodingDevice() const;
00717
00718
00719 public:
00720
00727 virtual void SetFmtpAttrL( const TDesC8& aFmtp,
00728 TBool parseFmtp = ETrue );
00729
00737 virtual TBool ParseFmtpAttrL( const TDesC8& aFmtp );
00738
00742 virtual void CreateFmtpAttrListL();
00743
00747 virtual void CreateFmtpAttrListL( const RArray<TUint>& aBitrates );
00748
00749 private:
00750
00757 virtual TInt SetModeChangePeriod( const TInt aPeriod );
00758
00764 virtual TInt ModeChangePeriod() const;
00765
00772 virtual TInt SetModeChangeNeighbor( const TBool aNeighbor );
00773
00779 virtual TBool ModeChangeNeighbor() const;
00780
00788 virtual TInt SetCrc( const TBool aCrc );
00789
00795 virtual TBool GetCrc() const;
00796
00804 virtual TInt SetRobustSorting( const TBool aRobust );
00805
00810 virtual TBool GetRobustSorting() const;
00811
00821 virtual TInt SetInterleaving( const TInt aFrameBlockCount );
00822
00828 virtual TInt GetInterleaving() const;
00829
00830 protected:
00831
00835 TUid iType;
00836
00840 TBool iEnableVAD;
00841
00845 TUint32 iSamplingFreq;
00846
00850 TBuf8<KMaxSdpNameLength> iSdpName;
00851
00855 TUint iPTime;
00856
00860 TUint iMaxPTime;
00861
00865 HBufC8* iFmtpAttr;
00866
00870 TUint iParsedFmtp;
00871
00875 TUint iBitrate;
00876
00880 TUint iBitrateMask;
00881
00885 TUint8 iPayloadType;
00886
00890 TCodecMode iCodecMode;
00891
00895 TUint iStartMediaPort;
00896
00900 TUint32 iFourCC;
00901
00905 TInt iHwFrameTime;
00906
00910 TInt iFrameSize;
00911
00915 TAlgoUsed iAlgoUsed;
00916
00920 TUint iRedCount;
00921
00925 TUint8 iRedundancyPT;
00926
00934 TUint iJitterBufInactivityTimeOut;
00935
00941 TUint iJitterBufThreshold;
00942
00948 TUint iJitterBufBufferLength;
00949
00953 TInt iModeChangePeriod;
00954
00958 TBool iNeighbor;
00959
00963 TBool iCrc;
00964
00968 TBool iRobust;
00969
00973 TInt iFrameBlockCount;
00974
00978 TInt iNumOfChannels;
00979
00983 TUint8 iComfortNoiseGenerationPt;
00984
00988 TInt iPriority;
00989
00993 TInt iPriorityPreference;
00994
00998 TUint iAverageBitrate;
00999
01003 TUint iMaxBitrate;
01004
01008 TReal iFramerate;
01009
01013 TUint iVideoWidth;
01014
01018 TUint iVideoHeight;
01019
01023 TUint8 iKeepAliveTimer;
01024
01028 TUint8 iKeepAlivePT;
01029
01033 TBuf8<KMaxKeepAliveDataLen> iKeepAliveData;
01034
01035
01036 TUint32 iPayloadFormatEncoder;
01037
01038
01039 TUint32 iPayloadFormatDecoder;
01040
01044 TInt iMaxRed;
01045
01049 HBufC8* iConfigKey;
01050
01054 TUid iEncodingDecodingDevice;
01055
01056 private:
01057
01058 #ifdef TEST_EUNIT
01059 friend class UT_CMccCodecInformation;
01060 #endif
01061 };
01062
01063 #endif // MMCCCODECINFORMATION_H