diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmceshared/inc/mcecomavccodec.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmceshared/inc/mcecomavccodec.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,239 @@ +/* +* Copyright (c) 2006 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: +* +*/ + + + + +#ifndef MCECOMAVCCODEC_H +#define MCECOMAVCCODEC_H + +// INCLUDES +#include +#include "mcecomvideocodec.h" +#include "mcedefs.h" + +const TReal KMceAvcDefaultFrameRate = 15; +const TInt KMceAvcDefaultFrameSize = 10000; +const TInt KMceAvcDefaultAllowedBitrate = KMceAvcCodecProfileIdBaseline | + KMceAvcCodecProfileIopConstraintSet | + KMceAvcBitrateLevel1; + +const TInt KMceAvcAllowedBitrateRecommendedHigh = KMceAvcCodecProfileIdBaseline | + KMceAvcCodecProfileIopConstraintSet | + KMceAvcBitrateLevel1b; + +const TInt KMceAvcLevel1BitrateBps = 64000; +const TInt KMceAvcLevel1bBitrateBps = 128000; +const TInt KMceAvcLevel11BitrateBps = 192000; +const TInt KMceAvcLevel12BitrateBps = 384000; +const TInt KMceAvcLevel13BitrateBps = 768000; +const TInt KMceAvcLevel2BitrateBps = 2000000; + +const TUint KMceAvcDefaultFrameHeight = 176; +const TUint KMceAvcDefaultFrameWidth = 144; + + +// CLASS DECLARATION +/** +* Container class for the codec information. +* +* @lib +*/ +class CMceComAvcCodec : public CMceComVideoCodec + { +public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aSdpName sdp name + */ + static CMceComAvcCodec* NewL( TBuf8 aSdpName ); + + /** + * Two-phased constructor. + * @param aSdpName sdp name + */ + static CMceComAvcCodec* NewLC( TBuf8 aSdpName ); + + /** + * Destructor. + */ + ~CMceComAvcCodec(); + +public: // from CMceComCodec + + /** + * Sets bitrate used with codec for encoding. + * @param aBitrate bitrate value for encoding + * @return KErrNotSupported if codec doesn't support bitrate + * value issued + */ + TInt SetBitrate( TUint aBitrate ); + + /** + * Sets bitrates allowed with codec. + * @param aBitrates allowed bitrate values + * @return KErrNotSupported if codec doesn't support bitrate + * values issued + */ + TInt SetAllowedBitrates( TUint aBitrates ); + + /** + * Returns max bit rate + * @return max bit rate + */ + TUint GetMaxBitRate(); + + /** + * Sets maximum bitrate of the codec. + * @param aMaxBitrate value of maximum bitrate used for encoding + * @return KErrNotSupported if codec doesn't support bitrate + * values issued + */ + TInt SetMaxBitrate( TUint aMaxBitrate ); + + /** + * Resolve allowed bitrates based on given bitrate value. + * @param aBitrate + * @param aAllowedBitrates, on return contains allowed bitrates + * @return error code + */ + TInt ResolveAllowedBitrates( TUint aBitrate, TUint& aAllowedBitrates ); + + /** + * Return ETrue, if this codec decodes rtpmap value + * @param aRtpmapValue rtp map + * @param aFmtpValue fmtp + * @param aIsStrictMatch, EFalse if matching is less strict + * @return ETrue, if this codec decodes rtpmap value + */ + TBool Decodes( const TDesC8& aRtpmapValue, + const TDesC8& aFmtpValue, + TBool aIsStrictMatch = ETrue ); + +#ifdef MCE_COMMON_SERVER_SIDE + + /** + * Used for storing fmtp proposal but the value is not set as official + * fmtp of the codec. Pre-check for fmtp validity + * @param aFmtpProposal + * @return ETrue if fmtp is valid + */ + TBool SetFmtpProposalL( const TDesC8& aFmtpProposal ); + + /** + * Set fmtp + * @param aReset if ETrue reset fmtp, EFalse append + */ + void SetFmtpFromIncomingSdpL( const TDesC8& aFmtpAttribute, + TBool aRoleAnswerer, + TBool aReset = KMceCodecFmtpReset ); + + /** + * Create fmtp for outgoing sdp + * @return fmtp, ownership is transferred + */ + HBufC8* FtmpForOutgoingSdpLC(); + +private: + + /** + * Removed defined parameter from input parameter and returns it + * @return stripped parameter if found, ownership is transferred + */ + HBufC8* StripFmtpParameterL( TPtr8& aInputFmtp, const TDesC8& aStrippedParameter ); + + /** + * Adds parameter into fmtp. Also separators are added if needed. + * @return fmtp containing input fmtp and addded parameter, ownership is transferred + */ + HBufC8* AddFmtpParameterL( const TDesC8& aInputFmtp, + const TDesC8& aAddedParameter, + const TDesC8& aAddedParameterVal ); + +#endif + +public: // serialization etc + + /** + * Clones + * @return clone + */ + CMceComVideoCodec* CloneL(); + +private: + + /** + * C++ default constructor. + */ + CMceComAvcCodec(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( TBuf8 aSdpName); + + /** + * second-phase copy constructor + */ + void ConstructL( CMceComAvcCodec& aCodec ); + + /** + * Profile-level-id value from fmtp + */ + TPtrC8 ParseProfileLevelId( const TDesC8& aFmtpValue ); + + /** + * Packetization-mode value from fmtp + */ + TPtrC8 ParsePacketizationMode( const TDesC8& aFmtpValue ); + + /** + * Profile-level value part from fmtp + */ + TPtrC8 ParseProfileLevelIdValPart( const TDesC8& aFmtpValue, + TInt aValPartOffset, + TInt aValPartLen, + const TDesC8& aDefaultVal ); + + /** + * Replace profile level value part of fmtp attribute. + */ + TInt ReplaceProfileLevelIdValuePart( TDes8& aModifiedFmtp, + const TDesC8& aReplacement, + TInt aValPartOffset ); + + /** + * Get value part of certain fmtp attribute. + */ + TPtrC8 GetFmtpAttributeValuePart( const TDesC8& aFmtpValue, + const TDesC8& aFmtpAttributeName, + TInt aValLen, + const TDesC8& aDefaultVal ); + + public: + + TUint8 iPacketizationMode; + + TUint8 iAllowedPacketizationModes; + + }; + + +#endif // MCECOMAVCCODEC_H + +// End of File \ No newline at end of file