--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dvrengine/CommonRecordingEngine/inc/CCRStreamingSession.h Wed Sep 01 12:20:37 2010 +0100
@@ -0,0 +1,469 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: Streaming session, eg one url, one channel...*
+*/
+
+
+
+
+#ifndef _CCRSTREAMINGSESSION_
+#define _CCRSTREAMINGSESSION_
+
+// INCLUDES
+#include <ipvideo/CRTypeDefs.h>
+#include "MCRStreamObserver.h"
+#include <e32base.h>
+#include <es_sock.h>
+
+// CONSTANTS
+// None
+
+// MACROS
+// None
+
+// DATA TYPES
+// None
+
+// FORWARD DECLARATIONS
+class CCRPacketBuffer;
+class CAsyncCallBack;
+class CCRConnection;
+class CCRPacketSourceBase;
+class CCRPacketSinkBase;
+class CRtpClipHandler;
+class CCREngine;
+class MCRPacketSource;
+
+// CLASS DECLARATION
+
+/**
+* Streaming session.
+*
+* @lib CommonRecordingEngine.lib
+* @since Series 60 3.0
+*/
+
+class CCRStreamingSession : public CBase,
+ public MCRStreamObserver
+ {
+
+public: // Datatype definitions
+
+ enum TCRSinkId
+ {
+ ECRRtspSinkId = 7000,
+ ECRXpsSinkId,
+ ECR3gpRecSinkId,
+ ECRRtpRecSinkId,
+ ECRNullSinkId
+ };
+
+ enum TCRSourceId
+ {
+ ECRRtspSourceId = 7100,
+ ECRDvbhSourceId,
+ ECRRtpSourceId,
+ ECRNullSourceId
+ };
+
+public: // Constructors and destructors
+
+ /**
+ * Two-phased constructor.
+ * @return CCRStreamingSession pointer.
+ */
+ static CCRStreamingSession* NewL( RSocketServ& aSockServer,
+ CCRConnection* aConnection,
+ CCREngine& aEngine );
+
+ /**
+ * Destructor
+ */
+ virtual ~CCRStreamingSession();
+
+public: // New methods
+
+ /**
+ * Method used to start a new RTSP session with parameters.
+ * @since Series 60 3.0
+ * @param aParams specifies the connection addr.
+ * @param aClipHandler a reference pointer to RTP clip handler.
+ * @param aSessionDefinition a session definition string.
+ * @return none.
+ */
+ void OpenSourceL( const SCRRtspParams& aParams,
+ const TDesC& aSessionDefinition );
+
+ /**
+ * Method used to start a new RTP session with parameters.
+ * @since Series 60 3.0
+ * @param aParams specifies the RTP clip parameters.
+ * @param aClipHandler a reference pointer to RTP clip handler.
+ * @param aSessionDefinition a session definition string.
+ * @return none.
+ */
+ void OpenSourceL( const SCRRtpPlayParams& aParams,
+ CRtpClipHandler*& aClipHandler,
+ const TDesC& aSessionDefinition );
+
+ /**
+ * Method used to start a new RTP session with parameters.
+ * @since Series 60 3.0
+ * @param aRtpHandle a open file handle for RTP file.
+ * @param aParams specifies the RTP clip parameters.
+ * @param aSessionDefinition a session definition string.
+ * @return none.
+ */
+ void OpenSourceL( const RFile& aRtpHandle,
+ CRtpClipHandler*& aClipHandler,
+ const TDesC& aSessionDefinition );
+
+ /**
+ * Method used to start a new DVB-H session with parameters.
+ * @since Series 60 3.0
+ * @param aLiveParams specifies DVB-H live parameters.
+ * @param aSessionDefinition a session definition string.
+ * @return none.
+ */
+ void OpenSourceL( const SCRLiveParams& aLiveParams,
+ const TDesC& aSessionDefinition );
+
+ /**
+ * Method used to start a new Null source session.
+ * @since Series 60 3.0
+ * @param aSessionDefinition a session definition string.
+ * @return none.
+ */
+ void OpenSourceL( const TDesC& aSessionDefinition );
+
+ /**
+ * Calculates source definition checksum: URL, file name etc.
+ * @since Series 60 3.0
+ * @param aName a pointer to defination name.
+ * @return none.
+ */
+ TUint SourceDefinition( const TDesC& aName );
+
+ /**
+ * Getter for source definition checksum.
+ * @since Series 60 3.0
+ * @param none.
+ * @return a value of source definition checksum.
+ */
+ TUint SourceChecksum();
+
+ /**
+ * Method that creates a set of buffers depending on
+ * number of rtp streams to handle.
+ * @since Series 60 3.0
+ * @param none.
+ * @return none.
+ */
+ void CreateAndSetBufferL();
+
+ /**
+ * Method that creates a packet sink that forwards
+ * packets to rop plugin for rendering.
+ * @since Series 60 3.0
+ * @param aLoopbackPort a RTSP port for loopback socket.
+ * @return none.
+ */
+ void CreateRtspSinkL( const TInt& aLoopbackPort );
+
+ /**
+ * Creates XPS sink for passing packets to Helix player.
+ * @since Series 60 3.0
+ * @param none.
+ * @return none.
+ */
+ void CreateXpsSinkL();
+
+ /**
+ * Creates RTP clip sink for saving packets to a clip.
+ * @since Series 60 3.0
+ * @param aRecordParams a recording parameters.
+ * @return none.
+ */
+ void Create3gpRecordSinkL( const SCRRecordParams& aRecordParams );
+
+ /**
+ * Creates RTP clip sink for saving packets to a clip.
+ * @since Series 60 3.0
+ * @param aRecordParams a recording parameters.
+ * @param aClipHandler a reference pointer to RTP clip handler.
+ * @return none.
+ */
+ void CreateRtpRecordSinkL( const SCRRecordParams& aRecordParams,
+ CRtpClipHandler*& aClipHandler );
+
+ /**
+ * Post action after source initialized.
+ * @since Series 60 3.0
+ * @param none.
+ * @return none.
+ */
+ void PostActionL();
+
+ /**
+ * Play command for current source.
+ * @since Series 60 3.0
+ * @param aStartPos is start position in seconds.
+ * @param aEndPos is end position in seconds.
+ * @return a system wide error code.
+ */
+ TInt PlayCommand( const TReal& aStartPos,
+ const TReal& aEndPos );
+
+ /**
+ * Pause command for current source.
+ * @since Series 60 3.0
+ * @param none.
+ * @return a system wide error code.
+ */
+ TInt PauseCommand();
+
+ /**
+ * Stop command for current source.
+ * @since Series 60 3.0
+ * @param none.
+ * @return a system wide error code.
+ */
+ TInt StopCommand();
+
+ /**
+ * Setter for source position.
+ * @since Series 60 3.0
+ * @param aPosition a current play position of the clip.
+ * @return a system wide error code.
+ */
+ TInt SetPosition( const TInt64 aPosition );
+
+ /**
+ * Getter for source position.
+ * @since Series 60 3.0
+ * @param aPosition a current play position of the clip.
+ * @param aDuration a duration of the clip.
+ * @return a system wide error code.
+ */
+ TInt GetPosition( TInt64& aPosition,
+ TInt64& aDuration );
+
+ /**
+ * Pause command for wanted sink.
+ * @since Series 60 3.0
+ * @param aSinkId identifies the sink.
+ * @return a system wide error code.
+ */
+ TInt PauseCommand( const TCRSinkId& aSinkId );
+
+ /**
+ * Restore command for wanted sink.
+ * @since Series 60 3.0
+ * @param aSinkId identifies the sink.
+ * @return a system wide error code.
+ */
+ TInt RestoreCommand( const TCRSinkId& aSinkId );
+
+ /**
+ * Stop command for wanted sink.
+ * @since Series 60 3.0
+ * @param aSinkId identifies the sink.
+ * @return a system wide error code.
+ */
+ TInt StopCommand( const TCRSinkId& aSinkId );
+
+ /**
+ * Method to transfer ownership of existing sink.
+ * @since Series 60 3.0
+ * @param aSinkId identifies the sink.
+ * @param aTargetSession identifies the sink.
+ * @return a system wide error code.
+ */
+ TInt TransferSink( const TCRSinkId& aSinkId,
+ CCRStreamingSession& aTargetSession );
+
+ /**
+ * Method to add new sink to session.
+ * @since Series 60 3.0
+ * @param aSink a pointer to the sink to add.
+ * @return a system wide error code.
+ */
+ TInt AddNewSink( CCRPacketSinkBase* aSink );
+
+ /**
+ * Veryfies if source or any sink on session uses RTP clip handler.
+ * @since Series 60 3.0
+ * @param none.
+ * @return true if clip handler user, otherwise false.
+ */
+ TBool ClipHandlerUsed();
+
+ /**
+ * Method that creates a packet sink that forwards.
+ * packets to bit bucket.
+ * @since Series 60 3.0
+ * @param none.
+ * @return none.
+ */
+ void CreateNullSinkL();
+
+ /**
+ * Sets SDP and buffer for sinks.
+ * @since Series 60 3.0
+ * @param none.
+ * @return none.
+ */
+ void InitializeSinks();
+
+ /**
+ * Set timestamp and sequence numbers from source to sinks.
+ * If Range is available, sets it too.
+ * @since Series 60 3.0
+ * @param none.
+ * @return none.
+ */
+ void SetSeqAndTs();
+
+ /**
+ * Method that sink calls to communicate that it wants to quit its business.
+ * It is now our responsibility to delete the sink after buffers have been
+ * notified about the situation.
+ * @since Series 60 3.0
+ * @param aSinkId identifies the sink.
+ * @return none.
+ */
+ void SinkStops( const TCRSinkId& aSinkId );
+
+ /**
+ * Method that source uses to communicate that it wants more packets.
+ * @since Series 60 3.0
+ * @param none.
+ * @return none.
+ */
+ void SourceRestore();
+
+ /**
+ * Method that source uses to communicate that it wants to be deleted.
+ * @since Series 60 3.0
+ * @param none.
+ * @return none.
+ */
+ void SourceStop();
+
+private: // Constructors and destructors
+
+ /**
+ * by default default constructor is private
+ * @param aSockServer is the socketserver to use when opening socks.
+ * @param aConnection
+ * @param aEngine
+ */
+ CCRStreamingSession( RSocketServ& aSockServer,
+ CCRConnection* aConnection,
+ CCREngine& aEngine );
+
+ /**
+ * second phase of 2-phased construction
+ */
+ void ConstructL();
+
+private: // Functions from base classes
+
+ /**
+ * From MCRStreamObserver.
+ * Source status indication.
+ * @since Series 60 3.0
+ * @param aStatus
+ * @return none.
+ */
+ void StatusChanged( MCRPacketSource::TCRPacketSourceState aStatus );
+
+private: // New methods
+
+ /**
+ * Static callback called via CAsyncCallBack to initiate cleaning of a sink
+ * @since Series 60 3.0
+ * @param aThis a pointer to owner of call back.
+ * @return none.
+ */
+ static TInt SinkStopCallBack( TAny* aThis );
+
+ /**
+ * Method for cleaning a sink. Called from SinkStopCallBack
+ * @since Series 60 3.0
+ * @param none.
+ * @return none.
+ */
+ void DoSinkStop( void );
+
+ /**
+ * Method that deletes a packet sink.
+ * @since Series 60 3.0
+ * @param aSinkId identifies the sink.
+ * @return none.
+ */
+ void DeleteSink( const TCRSinkId& aSinkId );
+
+public: // Data
+
+ /**
+ * Socket server.
+ */
+ RSocketServ& iSockServer;
+
+ /**
+ * Connections.
+ */
+ CCRConnection* iConnection;
+
+ /**
+ * Reference to engine object owning this instance.
+ */
+ CCREngine& iEngine;
+
+ /**
+ * Callback for cutting the call stack in cleanup.
+ */
+ CAsyncCallBack *iCleanUp;
+
+ /**
+ * Packet sources.
+ */
+ CCRPacketSourceBase* iSource;
+
+ /**
+ * Source definition checksum.
+ */
+ TUint iSourceChecksum;
+
+ /**
+ * Packet buffer.
+ */
+ CCRPacketBuffer* iBuffer;
+
+ /**
+ * Packet sinks.
+ */
+ RPointerArray<CCRPacketSinkBase> iSinks;
+
+ /**
+ * Array of sinks that have declared that they want to be deleted.
+ */
+ RArray<TCRSinkId> iSinksToDelete;
+
+};
+
+#endif // _CCRSTREAMINGSESSION_
+
+// End of File