--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmccinterface/inc/mmcccodecamr.h Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,599 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Class is used for configuring AMR codec.
+*
+*/
+
+
+
+
+#ifndef __MCC_CODEC_AMR_H__
+#define __MCC_CODEC_AMR_H__
+
+// INCLUDES
+#include "mmcccodecinformation.h"
+
+// CONSTANTS
+const TUint KDefaultModeChangePeriod = 1;
+
+// AMR-NB Codec possible bitrates
+const TInt KAmrNbBitrate475( 4750 );
+const TInt KAmrNbBitrate515( 5150 );
+const TInt KAmrNbBitrate590( 5900 );
+const TInt KAmrNbBitrate670( 6700 );
+const TInt KAmrNbBitrate740( 7400 );
+const TInt KAmrNbBitrate795( 7950 );
+const TInt KAmrNbBitrate102( 10200 );
+const TInt KAmrNbBitrate122( 12200 );
+
+
+const TUint KMccAllowedAmrNbBitrate475 = 0x0001;
+const TUint KMccAllowedAmrNbBitrate515 = 0x0002;
+const TUint KMccAllowedAmrNbBitrate590 = 0x0004;
+const TUint KMccAllowedAmrNbBitrate670 = 0x0008;
+const TUint KMccAllowedAmrNbBitrate740 = 0x0010;
+const TUint KMccAllowedAmrNbBitrate795 = 0x0020;
+const TUint KMccAllowedAmrNbBitrate102 = 0x0040;
+const TUint KMccAllowedAmrNbBitrate122 = 0x0080;
+const TUint KMccAllowedAmrNbBitrateAll = 0x00FF;
+
+// Allowed bitrates bitfield can contain additional information
+const TUint KMccAllowedAmrAdditionalInfo = 0x0F00;
+
+// If this bit is not present, mode-change-period=1
+const TUint KMccAllowedModeChangePeriod2 = 0x0100;
+
+// If this bit is not present, mode-change-neighbor=0
+const TUint KMccAllowedModeChangeNeighbor1 = 0x0200;
+
+const TUint KAmrNbSamplingFreq( 8000 );
+
+const TInt KAMRDefaultHwFrameTime( 20 );
+const TInt KAMRDefaultFrameSize( 32 );
+const TInt KAMRDefaultPTime( 20 );
+const TInt KAMRDefaultMaxPTime( 400 );
+
+const TUint KModTen( 10 );
+
+const TInt KAMRMode0( 0 );
+const TInt KAMRMode1( 1 );
+const TInt KAMRMode2( 2 );
+const TInt KAMRMode3( 3 );
+const TInt KAMRMode4( 4 );
+const TInt KAMRMode5( 5 );
+const TInt KAMRMode6( 6 );
+const TInt KAMRMode7( 7 );
+
+// Max five frames is used with AMR FEC redundancy
+const TInt KMaxAmrFecRedCount = 5;
+
+_LIT8( KMatchModeSet, "*mode-set*");
+_LIT8( KTxtModeSet, "mode-set=");
+_LIT8( KMatchOctetAlign, "*octet-align*");
+_LIT8( KMatchModeChangePeriod, "*mode-change-period*");
+_LIT8( KMatchModeChangeNeighbor, "*mode-change-neighbor*");
+_LIT8( KCrc,"*crc*" );
+_LIT8( KRobustSorting,"*robust-sorting*" );
+_LIT8( KInterleaving,"*interleaving*" );
+_LIT8( KMaxRed,"*max-red*" );
+
+// CLASS DECLARATION
+/**
+* Container class for the codec information.
+*
+* @lib MCCInterface.dll
+* @since Series 60 3.0
+*/
+NONSHARABLE_CLASS( CMccCodecAMR ) : public CMccCodecInformation
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CMccCodecAMR* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CMccCodecAMR();
+
+ public: // New functions
+
+ public: // From CMccCodecInformation
+
+ /**
+ * From CMccCodecInformation
+ */
+ TBool RequireSignalling( const CMccCodecInformation& aCandidate ) const;
+
+ /**
+ * From CMccCodecInformation
+ */
+ CMccCodecInformation* CloneDefaultsL();
+
+ /**
+ * From CMccCodecInformation
+ */
+ CMccCodecInformation* CloneDetailedL();
+
+ private:
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+
+ /**
+ * Set functions
+ */
+ public:
+
+ /**
+ * From CMccCodecInformation. Enable / Disable Voice Activity Detection.
+ * @since Series 60 3.0
+ * @param aEnableVAD Boolean indicating whether to enable Voice Activity Detection
+ * @return KErrNotSupported if codec doesn't support VAD; otherwise KErrNone.
+ */
+ TInt EnableVAD( TBool aEnableVAD );
+
+ /**
+ * From CMccCodecInformation. Sets bitrate used with codec.
+ * @since Series 60 3.0
+ * @param aBitrate New bitrate value
+ * @return KErrNotSupported if codec doesn't support bitrate value issued; otherwise KErrNone.
+ */
+ TInt SetBitrate( TUint aBitrate );
+
+ /**
+ * From CMccCodecInformation. Sets the sampling frequency.
+ * @since Series 60 3.0
+ * @param aSamplingFreq Sampling frequency to be used
+ * @return KErrNotSupported if codec doesn't support sampling frequency issued; otherwise KErrNone.
+ */
+ TInt SetSamplingFreq( TUint32 aSamplingFreq );
+
+ /**
+ * From MccCodecInformation. Sets the packet time.
+ * @since Series 60 3.0
+ * @param aPTime PacketTime.
+ * @return One of the standard system-wide error codes.
+ */
+ TInt SetPTime( TUint aPTime );
+
+ /**
+ * From MccCodecInformation. Sets max packet time.
+ * @since Series 60 3.0
+ * @param aMaxPTime Maximum PacketTime
+ * @return One of the standard system-wide error codes.
+ */
+ TInt SetMaxPTime( TUint aMaxPTime );
+
+ /**
+ * From CMccCodecInformation. Sets the sdp name.
+ * @since Series 60 3.0
+ * @param aRtpId - [input] RTP session ID
+ * @return One of the standard system-wide error codes.
+ */
+ TInt SetSdpName( const TDesC8& aSdpName );
+
+ /**
+ * From CMccCodecInformation. Sets the payload type.
+ * @since Series 60 3.0
+ * @param aRtpId - [input] RTP session ID
+ * @return One of the standard system-wide error codes.
+ */
+ TInt SetPayloadType( TUint8 aPayloadType );
+
+ /**
+ * From CMccCodecInformation. Sets the codec mode.
+ * @since Series 60 3.0
+ * @param aMode Codec mode ( e.g. ULAW/ALAW, Bandwidth efficient / octet aligned )
+ * @return KErrNotSupported if codec doesnt' support codec mode value issued; otherwise KErrNone.
+ */
+ TInt SetCodecMode( TCodecMode aCodecMode );
+
+
+ /**
+ * Sets the allowed bitrates for the codec.
+ * @since Series 60 3.0
+ * @param aBitrateMask bitrate mask.
+ * @return KErrNotSupported if codec doesnt' support the bitrate mask
+ * value issued; otherwise KErrNone.
+ */
+ TInt SetAllowedBitrates( TUint aBitrateMask );
+
+ /**
+ * Set number of channels. Range between 1 to 8. Refer to RFC3551 4.1
+ * for interpretation of channels value. Default value is 1.
+ *
+ * @since Series 60 3.0
+ * @return One of the standard system-wide error codes.
+ */
+ TInt SetChannels( TInt aNumOfChannels );
+
+
+ /**
+ * From CMccCodecInformation.
+ * Sets the redundancy level. Setting is effective only if some
+ * redundancy algorithm is set with SetAlgo().
+ *
+ * @param aRedCount The level of redundancy
+ * @return One of the standard system-wide error codes.
+ */
+ TInt SetRedCount( TUint aRedCount );
+
+ /**
+ * Sets the upper limit on the usage of redundancy in milliseconds.
+ * @since Series 60 3.2
+ * @param aMaxRed maximum redundancy
+ * @return One of the standard system-wide error codes.
+ */
+ TInt SetMaxRed( TInt aMaxRed );
+
+ /**
+ * New virtual functions
+ */
+ protected:
+
+ /**
+ * Sets bitrate used with codec.
+ * @since Series 60 3.0
+ * @param aBitrateMask bitrate mask, sets the largest bitrate
+ * @return KErrNotSupported if codec doesn't support bitrate value
+ * issued; otherwise KErrNone.
+ */
+ virtual TInt SetBitrateFromBitrateMask( TUint aBitrateMask );
+
+ /**
+ * From CMccCodecInformation. Gets the mode set of a bitrate.
+ * @since Series 60 3.0
+ * @param aBitrate The bitrate value
+ * @return mode set value
+ */
+ virtual TInt GetBitrateModeSet( TUint aBitrate );
+
+ /**
+ * From CMccCodecInformation. Gets the bitrate mask from the mode set .
+ * @since Series 60 3.0
+ * @param aMode The mode set
+ * @param aBitrateMask reference to bitrateMask
+ * @return KErrNotSupported if codec doesnt' support the bitrate mask
+ * value issued; otherwise KErrNone.
+ */
+ virtual TInt GetBitrateMaskFromMode( TUint aMode, TUint& aBitrateMask );
+
+
+ /**
+ * Gets the allowed bitrates for the codec.
+ * @since Series 60 3.0
+ * @param aBitrateMask RArray<TUint> reference
+ * @return KErrNotSupported if codec doesnt' support the function
+ * otherwise KErrNone.
+ */
+ virtual TInt GetAllowedBitratesArrayL( RArray<TUint>& aBitratesArray );
+
+ /**
+ * Sets the bitrate from the mode set .
+ * @since Series 60 3.0
+ * @param aBitrate The mode set
+ * @return mode set value
+ */
+ virtual void SetBitrateModeSet( TUint aModeSet );
+
+
+ public:
+
+ /**
+ * Get number of channels.
+ * @since Series 60 3.0
+ * @return One of the standard system-wide error codes.
+ */
+ TInt GetChannels( TInt& aNumOfChannels ) const;
+
+ /**
+ * FMTP functions
+ */
+ public: //Public FMTP functions
+
+ /**
+ * Get the fmtp string
+ * @since Series 60 3.0
+ * @return Fmtp.
+ */
+ TDesC8& GetFmtpL( );
+
+ /**
+ * Parses the fmtp attributes, and updates the internal values
+ * except the iFmtpAttr attribute
+ * @since Series 60 3.0
+ * @param aFmtp Fmtp attribute
+ * @return True if any param was updated
+ */
+ TBool ParseFmtpAttrL( const TDesC8& aFmtp );
+
+ /**
+ * Creates the fmtp string from internal values
+ * @since Series 60 3.0
+ * @return void
+ */
+ void CreateFmtpAttrListL();
+
+ /**
+ * Creates the fmtp string from internal values and the given bitrates
+ * @since Series 60 3.0
+ * @return void
+ */
+ void CreateFmtpAttrListL( const RArray<TUint>& aBitrates );
+
+
+ protected: // New functions for derived classes
+
+
+ /**
+ * C++ default constructor.
+ */
+ CMccCodecAMR();
+
+ /**
+ * Parses the fmtp attribute and updates the right param
+ * @since Series 60 3.0
+ * @param aFmtp Fmtp attribute
+ * @return ETrue if any params were updated
+ */
+ TBool ParseFmtpSegmentL( const TDesC8& aFmtp );
+
+ /**
+ * Parses the fmtp attribute and updates the octet-align value
+ * @since Series 60 3.0
+ * @param aFmtp Fmtp attribute
+ * @return ETrue if any params were updated
+ */
+ TBool ParseFmtpOctetAlignL( const TDesC8& aFmtpOctetAlign );
+
+ /**
+ * Parses the fmtp attribute and updates the mode-change-period value
+ * @since Series 60 3.0
+ * @param aFmtp Fmtp attribute
+ * @return ETrue if any params were updated
+ */
+ TBool ParseFmtpModeChangePeriodL( const TDesC8& aFmtpModeChangePeriod );
+
+ /**
+ * Parses the fmtp attribute and updates the mode-change-neighbor value
+ * @since Series 60 3.0
+ * @param aFmtp Fmtp attribute
+ * @return ETrue if any params were updated
+ */
+ TBool ParseFmtpModeChangeNeighborL( const TDesC8& aFmtpModeChangeNeighbor );
+
+ /**
+ * Parses the fmtp attribute and updates the crc value
+ * @since Series 60 3.0
+ * @param aFmtp Fmtp attribute
+ * @return ETrue if any params were updated
+ */
+ TBool ParseFmtpCrcL( const TDesC8& aFmtpCrc );
+
+ /**
+ * Parses the fmtp attribute and updates the robust sorting value
+ * @since Series 60 3.0
+ * @param aFmtp Fmtp attribute
+ * @return ETrue if any params were updated
+ */
+ TBool ParseFmtpRobustSortingL( const TDesC8& aFmtpRobustSorting );
+
+
+ /**
+ * Creates the octet-align value of the FMTP
+ * @since Series 60 3.0
+ * @param aBuf The buffer to modify
+ * @return ETrue if any params were updated
+ */
+ TBool CreateFmtpOctetAlign( TDes8& aBuf );
+
+ /**
+ * Creates the mode-change-period value of the FMTP
+ * @since Series 60 3.0
+ * @param aBuf The buffer to modify
+ * @return ETrue if any params were updated
+ */
+ TBool CreateFmtpModeChangePeriod( TDes8& aBuf );
+
+ /**
+ * Creates the mode-change-neigbor value of the FMTP
+ * @since Series 60 3.0
+ * @param aBuf The buffer to modify
+ * @return ETrue if any params were updated
+ */
+ TBool CreateFmtpModeChangeNeighbor( TDes8& aBuf );
+
+ /**
+ * Creates the max-red value of the FMTP
+ * @since Series 60 3.2
+ * @param aBuf The buffer to modify
+ * @return ETrue if any params were updated
+ */
+ TBool CreateFmtpMaxRed( TDes8& aBuf );
+
+ /**
+ * Parses the fmtp attribute and updates the max red value
+ * @since Series 60 3.2
+ * @param aFmtpMaxRed Fmtp attribute
+ * @return ETrue if any params were updated
+ */
+ TBool ParseFmtpMaxRedL( const TDesC8& aFmtpMaxRed );
+
+ /**
+ * Parses the fmtp attribute and updates the mode-set value
+ * @since Series 60 3.0
+ * @param aFmtp Fmtp attribute
+ * @return ETrue if any params were updated
+ */
+ TBool ParseFmtpModeSetL( const TDesC8& aFmtpModeSet );
+
+ /**
+ * Creates the mode-set value of the FMTP according to the bitrates
+ * @since Series 60 3.0
+ * @param aBuf The buffer to modify
+ * @param aBitrates Supported bitrates of the codec
+ * @return ETrue if the buffer was modified
+ */
+ TBool CreateFmtpModeSet( TDes8& aBuf,
+ const RArray<TUint>& aBitrates );
+
+ /**
+ * Parses the fmtp attribute and updates the interleaving value
+ * @since Series 60 3.0
+ * @param aFmtp Fmtp attribute
+ * @return ETrue if any params were updated
+ */
+ TBool ParseFmtpInterleavingL( const TDesC8& aFmtpInterleaving );
+
+ /**
+ * Specifies the number of frame blocks,
+ * that is the interval at which codec mode changes are allowed
+ * @since Series 60 3.0
+ * @return One of the standard system-wide error codes.
+ */
+ TInt SetModeChangePeriod( const TInt aPeriod );
+
+ /**
+ * Get specified number of frame blocks
+ * @since Series 60 3.0
+ * @return One of the standard system-wide error codes.
+ */
+ TInt ModeChangePeriod( ) const;
+
+ /**
+ * Set boolean variable, which indicates change between two modes.
+ * With default value 1 changes are only allowed to the
+ * neighboring mode.
+ * @since Series 60 3.0
+ * @return One of the standard system-wide error codes.
+ */
+ TInt SetModeChangeNeighbor( const TBool aNeighbor );
+
+ /**
+ * Get boolean variable, which indicates change between two modes.
+ * @since Series 60 3.0
+ * @return Return iNeighbor
+ */
+ TBool ModeChangeNeighbor( ) const;
+
+ /**
+ * Set boolean type frame CRC value. With value 1 CRC shall be
+ * included in the payload, otherwise not. 1 also implies that
+ * octet-alignet operation shall be used for the session.
+ * @since Series 60 3.0
+ * @return One of the standard system-wide error codes.
+ */
+ TInt SetCrc( const TBool aCrc );
+
+ /**
+ * Get boolean type CRC value.
+ * @since Series 60 3.0
+ * @return iCrc
+ */
+ TBool GetCrc( ) const;
+
+ /**
+ * Set robust sorting on/off with boolean value. With value 1
+ * the payload SHALL employ robust sorting. Implies automatically
+ * that octet-aligned operation SHALL be used for the session.
+ * @since Series 60 3.0
+ * @return One of the standard system-wide error codes.
+ */
+ TInt SetRobustSorting( const TBool aRobust );
+
+ /**
+ * Get boolean type robust sorting value
+ * @since Series 60 3.0
+ * @return iRobust
+ */
+ TBool GetRobustSorting( ) const;
+
+ /**
+ * Set interleaving as unsigned integer. Number range is 0-63.
+ * Indicates that frame-block level interleaving SHALL be
+ * used for the session and it's value defines the max number of
+ * frame-blocks allowed in interleaving group. Implies automatically
+ * that octet-aligned operation SHALL be used.
+ * @since Series 60 3.0
+ * @return One of the standard system-wide error codes.
+ */
+ TInt SetInterleaving( const TInt aFrameBlockCount );
+
+ /**
+ * Get Interleavin value.
+ * @since Series 60 3.0
+ * @return iFrameBlockCount
+ */
+ TInt GetInterleaving( ) const;
+
+ void SetBitrateMask( TUint aBitrateMask, TBool aKeepAdditionalInfo = EFalse );
+
+ void SetBitrateMaskAdditionalInfo( TUint aAdditionalInfo );
+
+ protected: // Data
+
+ TUint iDefaultBitrateMask;
+
+ TUint iDefaultBitrate;
+
+ TUint iAdditionalInfoMask;
+
+ TInt iMaxModeSetVal;
+
+ private: // Data
+
+ /**
+ * Mode-set exist in FMTP
+ */
+ TBool iModesExist;
+
+ /**
+ * Octet-align exist in FMTP
+ */
+ TBool iOctetAlignExist;
+
+ /**
+ * Mode-change-period exist in FMTP
+ */
+ TBool iModeChangePeriodExist;
+
+ /**
+ * Mode-change-neighbor exist in FMTP
+ */
+ TBool iModeChangeNeighborExist;
+
+ /**
+ * Max-red exist in FMTP
+ */
+ TBool iMaxRedExist;
+
+private:
+
+ #ifdef TEST_EUNIT
+ friend class UT_CMccCodecAMR;
+ friend class UT_CMccCodecAmrWb;
+ #endif
+
+ };
+
+
+#endif // __MCC_CODEC_AMR_H__
+
+// End of File