/*
* Copyright (c) 2005 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 CMCEAUDIOSDPCODEC_H
#define CMCEAUDIOSDPCODEC_H
#include "mcemediasdpcodec.h"
class CMceComAudioStream;
class CMceComAudioCodec;
#define MCE_SDP_STRING_AUDIOL()\
SdpCodecStringPool::StringPoolL().StringF( \
SdpCodecStringConstants::EMediaAudio,\
SdpCodecStringPool::StringTableL() )
/**
*
*
* @lib
*/
class CMceAudioSdpCodec: public CMceMediaSdpCodec
{
public://constructor and destructor
/**
* Constructor
*/
static CMceAudioSdpCodec* NewL();
/**
* Destructor
*/
~CMceAudioSdpCodec();
public: //from CMceSdpCodec
/**
* Returns ETrue, if media is encoded by this codec
* @return ETrue, if media is encoded by this codec
*/
TBool Encodes( const CMceComMediaStream& aStream ) const;
public: //from CMceMediaSdpCodec
/**
* Returns codecs
* @param aStream media stream
* @param return codecs
* @leave if stream type does not macth codecs
*/
const RPointerArray<CMceComCodec>& CodecsL( CMceComMediaStream& aStream ) const;
/**
* Encodes rtpmap -attribute
* @param aCodec codec encoded to rtpmap
* @leave system wide error
*/
CSdpFmtAttributeField* EncodeRtpmapAttributeLC( CMceComCodec& aCodec ) const;
/**
* Encodes media related attributes
* @param aCodec the codec
* @param aMediaLine media line
* @param aRtpmap rtpmap attribute
* @leave system wide error
*/
void EncodeMediaAttributesL( CMceComCodec& aCodec,
CSdpMediaField& aMediaLine,
CSdpFmtAttributeField& aRtpmap ) const;
/**
* Decodes media related attributes
* @param aMediaLine media line
* @param aCodec the codec
* @leave system wide error
*/
void DecodeMediaAttributesL( CSdpMediaField& aMediaLine,
CMceComCodec& aCodec,
CSdpFmtAttributeField& aRtpmap ) const;
/**
* Creates media stream based on sdp type
* @param aType the sdp type sendrecv, sendonly or receive only
* @return media stream
* @leave system wide error
*/
CMceComMediaStream* CreateStreamLC( TInt aType ) const;
/**
* Updates media based on received offer
* @param aStream media stream
* @param aDirection the direction
* @leave system wide error
*/
void UpdateStreamL( CMceComMediaStream& aStream, TInt aDirection ) const;
/**
* Creates codec based on rtpmap line
* @param aRtpmap rtpmap line
* @return codec or NULL, if not supported
* @leave system wide error
*/
CMceComCodec* CreateCodecLC( CSdpFmtAttributeField& aRtpmap ) const;
/**
* Creates codec based on payload type
* @param aPayload payload
* @param aMediaLine media line
* @return codec or NULL, if not supported
* @leave system wide error
*/
CMceComCodec* CreateCodecLC( TUint aPayload, CSdpMediaField& aMediaLine ) const;
/**
* Decodes session level media attributes
* @param aStream media stream
* @param aSdpDocument sdp document
* @return codec or NULL, if not supported
* @leave system wide error
*/
void DecodeSessionMediaAttributesL( CMceComMediaStream& aStream,
CSdpDocument& aSdpDocument ) const;
private:
/**
* C++ Constructor
* @param aMedia media
*/
CMceAudioSdpCodec( RStringF aMedia );
/**
* Creates uplink audio stream with mic and rtp sink
* @return uplink audio stream
*/
CMceComAudioStream* CreateUplinkStreamL() const;
/**
* Creates downlink audio stream with rtp source and speaker
* @return downlink audio stream
*/
CMceComAudioStream* CreateDownlinkStreamL() const;
};
#endif //CMCEAUDIOSDPCODEC_H