diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcesrv/mmcemediamanager/inc/mcesrvstream.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmcesrv/mmcemediamanager/inc/mcesrvstream.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,462 @@ +/* +* 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 CMCESRVSTREAM_H +#define CMCESRVSTREAM_H + +#include +#include +#include +#include "mcemediadefs.h" +#include "mcecommediastream.h" +#include "mcesrv.h" + +class CMceComAudioStream; +class CMceComVideoStream; +class CMceSrvSource; +class CMceSrvSink; +class CMceSrvCodec; +class CMceComEndpoint; +class CMceComMediaSource; +class CMceComMediaSink; +class CMceComCodec; +class CMceMediaManager; +class TMceMccComEvent; +class CMccCodecInformation; +class CMccInterface; +class CMceDtmfHandler; +class CMceSrvEndpoint; + + +const TBool KMceSrvStreamCallback = ETrue; +const TBool KMceSrvStreamNoCallback = EFalse; +const TBool KMceSrvStreamDefaultSequence = EFalse; +const TBool KMceSrvStreamAlternativeSequence = ETrue; +const TBool KMceSrvStreamForce = ETrue; +const TBool KMceSrvStreamNoForce = EFalse; +const TBool KMceSrvStreamSync = ETrue; +const TBool KMceSrvStreamNoSync = EFalse; + + + +/** + * + * + * @lib + */ +class CMceSrvStream: public CBase + { + +public: // enums + + /** + * Current state in MCC + */ + enum TState + { + EAdopted = 1, + ECreated, + ECreatingLink, + ELinkCreated, + EPreparing, + EPrepared, + EStarting, + EPending, + EStopped, + EInactive, + EStarted, + EPausing, + EPaused + }; + + +public: // Constructors & Destructor + + + /** + * Decodes stream to array of server streams. + * This is factory method + * @return array of server streams + */ + static void DecodeL( RPointerArray& aStreams, + CMceComMediaStream& aStream, + CMceMediaManager& aManager ); + + + /** + * Creates srv stream. + */ + static CMceSrvStream* NewL( CMceMediaManager& aManager, + CMceComMediaStream& aData, + CMceComMediaSource& aSource, + CMceComMediaSink& aSink, + CMceComCodec& aCodec ); + + /** + * Destructor. + */ + ~CMceSrvStream(); + + +public: // static API + + static CMceSrvStream* EventReceived( + RPointerArray& aStreams, + TMceMccComEvent& aEvent, + TBool aConsumeOnlyOnce = EFalse ); + + +public: // virtual functions + + + /** + * Gets session id + * @return session id + */ + virtual TUint32 SessionId() const; + + /** + * Gets link id + * @return link id + */ + virtual TUint32 LinkId() const; + + /** + * Sets link id + * @param aLinkId link id + */ + virtual void SetLinkId( TUint32 aLinkId ); + + /** + * Gets IAP id + * @return IAP id + */ + virtual TUint32 IapId() const; + + /** + * Gets local media port of stream + * @return local media port of stream + */ + virtual TUint LocalMediaPort() const; + + + /** + * Handles event from MCC + * @return status of operation + */ + virtual TInt EventReceived( TMceMccComEvent& aEvent, TBool aCallback = KMceSrvStreamCallback ); + + /** + * Cleans up unused sinks/sources from mcc + */ + virtual void Cleanup(); + + /** + * Checks, if this is equal to another stream + * @param aStream an another stream + * @return ETrue, if this is equal + */ + virtual TBool IsEqual( const CMceSrvStream& aStream ) const; + + /** + * Merges with stream from cloned session + */ + virtual void Merge( CMceSrvStream& aMergeWith, TBool aDeepMerge = EFalse ); + + /** + * UnMerges with stream from cloned session + */ + void UnMergeL( CMceSrvStream& aUnMergeFrom ); + + /** + * Is Prepared by MCC + * @return ETrue, if so + */ + virtual TBool IsMccPrepared() const; + + /** + * Returns state of stream, which depends on states of + * sink and source + * @return the state + */ + virtual TState State() const; + + /** + * Invalidates the stream + */ + virtual void Invalidate(); + + /** + * Is adopted + */ + virtual TBool IsAdopted() const; + +public: // Data access etc + + /** + * Sets local media port of stream + * @param aPort local media + */ + void SetLocalMediaPort( TUint aPort ); + + /** + * Gets id + * @return id + */ + TUint32& Id(); + + /** + * Gets stream type + * @return stream type + */ + CMceComMediaStream::TStreamType StreamType() const; + + /** + * Gets direction + * @return direction + */ + CMceComMediaStream::TStreamType Direction() const; + + /** + * Is Merged + * @return ETrue, if merged + */ + TBool IsMerged() const; + + /** + * Gets the original com stream + * @return the original com stream + */ + CMceComMediaStream& Data() const; + + /** + * Gets remote ip address + * @return remote ip address + */ + TInetAddr RemoteIpAddress() const; + + /** + * Gets codec of the mcc stream. + * @return codec of the mcc stream. + */ + CMceComCodec& Codec() const; + + /** + * Gets source of the mcc stream. + * @return source of the mcc stream. + */ + CMceSrvSource& Source() const; + + /** + * Gets sink of the mcc stream. + * @return sink of the mcc stream. + */ + CMceSrvSink& Sink() const; + + + /** + * Gets mcc stream type + * @return mcc stream type + */ + TInt MccStreamType() const; + + /** + * Gets mcc link type + * @return mcc link + */ + TInt LinkType() const; + + /** + * Checks, if received event matches + * @param aEvent an event + * @return ETrue, if there is a match + */ + TBool Consumes( const TMceMccComEvent& aEvent ) const; + + /** + * Returns dtmf handler for the stream. + * @return dtmf handler + */ + CMceDtmfHandler& DtmfHandlerL( CMccInterface& aMccInterface ); + + /** + * Updates sink/source's "is enabled" status. + * @param aSinkAffected if sink status is changed + * @param aSourceAffected if source status is changed + * @param aIsEnabled + */ + void UpdateEndpointStates( TBool aSinkAffected, + TBool aSourceAffected, + TBool aIsEnabled ); + + /** + * Checks whether stream is associated with certain endpoint. + * @param aEndpoint search term + * @param aUseProxyMatch + */ + TBool EndpointMatch( const CMceComEndpoint& aEndpoint, + TBool aUseProxyMatch ); + +public: // new + + + /** + * Hook to allow stream to have alternative create link sequence + * @return EFalse to indicate that normal link creation can + * take place. ETrue indicates that link creation is not needed + */ + TBool CreateLinkL(); + + /** + * Hook to allow stream to have alternative preparation + * @return EFalse to indicate that normal preparation can + * take place. ETrue indicates that stream has been prepared + * by itself + */ + TBool PrepareL(); + + /** + * Hook to allow stream to have alternative starting + * @return EFalse to indicate that normal starting can + * take place. ETrue indicates that stream has been started + * by itself + */ + TBool StartL(); + + /** + * Hook to allow stream to have alternative updating + * @return EFalse to indicate that normal updating can + * take place. ETrue indicates that stream has been updated + * by itself + */ + TBool SynchronizeL(); + + /** + * Hook to allow stream to have alternative stopping + * @return EFalse to indicate that normal stopping can + * take place. ETrue indicates that stream has been stopped + * by itself + */ + TBool Stop(); + + /** + * Hook to allow stream to have alternative validation + * @return EFalse to indicate that normal validation can + * take place. ETrue indicates that stream has been validated + * by itself + */ + TBool Validate(); + + /** + * Called as a part of session unmerge + */ + void UnMerge(); + + /** + * Checks if update requires signalling + * @param aCurrent current stream, if NULL this is a new stream + * @param aMccCurentCodec current codec, if NULL this is a new stream + * @param aMccUpdateCodec codec based on update (this) + * @return indication of signaling required + */ + TInt RequireSignalling( CMceSrvStream& aCurrent, + CMccCodecInformation& aMccCurentCodec, + CMccCodecInformation& aMccUpdateCodec ) const; + + /** + * Called when new stream has beed detected in update + * @param aUpdateStreams new streams from update + * @return indication of signaling required + */ + TInt RequireSignalling( RPointerArray& aUpdateStreams ) const; + + + /** + * Called after prepare is called for this + * stream + */ + void MccPrepareCalledL(); + + +protected://CMcc + + /** + * C++ default constructor. + */ + CMceSrvStream(); + + + /** + * C++ default constructor. + */ + CMceSrvStream( CMceMediaManager* aManager, + CMceComMediaStream* aData, + CMceComCodec* aCodec ); + + void ConstructL( CMceComMediaSource& aSource, + CMceComMediaSink& aSink ); + + +private: // + + + static void DecodeAudioL( RPointerArray& aStreams, + CMceComAudioStream& aAudio, + CMceMediaManager& aManager ); + + static void DecodeVideoL( RPointerArray& aStreams, + CMceComVideoStream& aVideo, + CMceMediaManager& aManager ); + + TBool UseDefaultStartupSequence(); + + TBool StreamStateChangeEventReceived( TMceMccComEvent& aEvent ); + + void DoEndpointDisable( CMceSrvEndpoint& aEndpoint ); + +protected://not owned data + + CMceMediaManager* iManager; + +protected: // owned data + + CMceSrvSource* iSource; + CMceSrvSink* iSink; + CMceComMediaStream* iData; + CMceComCodec* iCodec; + + TBool iMerged; + + CMceDtmfHandler* iDtmfHandler; + +protected: // NOT owned data + + TUint32 iID; + + friend class CMceAdoptedSrvStream; + + //definitions for unit testing + MCEMM_UT_DEFINITIONS + + }; + + + +#endif //CMCESRVSTREAM_H