dvrengine/CommonRecordingEngine/inc/CCRXpsSink.h
changeset 0 822a42b6c3f1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dvrengine/CommonRecordingEngine/inc/CCRXpsSink.h	Thu Dec 17 09:14:38 2009 +0200
@@ -0,0 +1,325 @@
+/*
+* 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:    Packet sink where XPS gets the streaming.*
+*/
+
+
+
+#ifndef CCRXPSSINK_H
+#define CCRXPSSINK_H
+
+// INCLUDES
+#include "CCRPacketSinkBase.h"
+#include "MCRTimerObserver.h"
+#include "VideoServiceUtilsConf.hrh"
+#include <CXPSPktSinkObserver.h>
+#include <RtpDef.h>
+#include "videoserviceutilsLogger.h"
+#ifdef VIA_FEA_IPTV_USE_IPDC
+#include <H264Mpeg4GenrToFileFormat.h>
+#endif // VIA_FEA_IPTV_USE_IPDC
+
+// CONSTANTS
+// None
+
+// MACROS
+// None
+
+// DATA TYPES
+// None
+
+// FORWARD DECLARATIONS
+class CCRPacketBuffer;
+class CXPSPacketSink;
+class CCRStreamingSession;
+class CRtpTsConverter;
+class CRtpPacket;
+class CCRTimer;
+
+// CLASS DECLARATION
+
+/**
+*  Packet sink that does not forward packets. Good for testing. 
+*
+*  @lib CommonRecordingEngine.lib
+*  @since Series 60 3.0
+*/
+class CCRXpsSink : public CCRPacketSinkBase,
+                   public MCRTimerObserver,
+                   public MXPSPktSinkObserver
+    {
+
+public: // Constructors and destructors   
+    
+    /**
+    * Two-phased constructor.
+    * @return CCRXpsSink pointer. 
+    */
+    static CCRXpsSink* NewL( CCRStreamingSession::TCRSinkId aSinkId,
+                             CCRStreamingSession& aOwningSession );
+    
+    /**
+    * Destructor 
+    */
+    virtual ~CCRXpsSink();
+    
+protected: // Constructors and destructors
+
+    /**
+    * By default default constructor is private
+    * @param aConnection is the IAP representative that we need to use
+    * @param aSockServer is the socketserver to use when opening socks
+    * @param aSinkId that this class needs to use when reporting progress back to owner
+    * @param aOwningSession is the streaming session that owns this instance
+    */
+    CCRXpsSink( CCRStreamingSession::TCRSinkId aSinkId,
+                CCRStreamingSession& aOwningSession );
+
+    /**
+    * Second phase of 2-phased construction
+    */
+    void ConstructL(); 
+
+private: // Methods from base classes
+    
+    /**
+    * From CCRPacketSinkBase.
+    * Method for setting the sdp in use.
+    * @since Series 60 3.0
+    * @param aSdp is the new sdp.
+    * @return none.
+    */
+    void SetSdpL( const TDesC8& aSdp );
+    
+    /**
+    * From CCRPacketSinkBase.
+    * Adds packet to the sink.
+    * @since Series 60 3.0
+    * @return none.
+    */
+    void NewPacketAvailable();
+    
+    /**
+    * From CCRPacketSinkBase.
+    * Buffer reset info for the sink.
+    * @since Series 60 3.0
+    * @return none.
+    */
+    void BufferResetDone();
+    
+    /**
+    * From MCRTimerObserver.
+    * The function to be called when a timeout occurs.
+    * @since Series 60 3.0
+    * @param aTimer a pointer to timer.
+    * @return none.
+    */
+    void TimerExpired( CCRTimer* aTimer );
+
+    /**
+    * From MXPSPktSinkObserver.
+    * API to inform for resumption of packet supply.
+    * @since Series 60 3.0
+    * @param uStreamId a stream id.
+    * @return none.
+    */
+    void RestorePacketSupply( TUint uStreamId );
+
+private: // New methods
+
+    /**
+    * Restores sink for new packets.
+    * @since Series 60 3.0
+    * @param none.
+    * @return none.
+    */
+    void RestoreSink();
+
+    /**
+    * Sends one RTP packet to a player.
+    * @since Series 60 3.0
+    * @param none.
+    * @return ETrue if packet was sent, EFalse if not.
+    */
+    TBool SendPacket();
+
+    /**
+    * Adjust time stamp and enque audio packet to player.
+    * @since Series 60 3.0
+    * @param aPacket a packet payload to send.
+    * @return a system wide error code of sending.
+    */
+    TInt SendAudioPacket( const TDesC8& aPacket );
+
+    /**
+    * Adjust time stamp and enque video packet to player.
+    * @since Series 60 3.0
+    * @param aPacket a packet payload to send.
+    * @return a system wide error code of sending.
+    */
+    TInt SendVideoPacket( const TDesC8& aPacket );
+
+    /**
+    * Adjust time stamp and enque sub title packet to player.
+    * @since Series 60 3.0
+    * @param aPacket a packet payload to send.
+    * @return a system wide error code of sending.
+    */
+    TInt SendTitlePacket( const TDesC8& aPacket );
+
+    /**
+    * Sends packet to the player.
+    * @since Series 60 3.0
+    * @param aStreamId a stream id of packet.
+    * @return a system wide error code of sending.
+    */
+    TInt EnqueuePacket( const TUint aStreamId );
+    
+    /**
+     * Serach if buffer contains control stream packets.
+     * If not, in non continous stream ask more packets to buffer.  
+     * 
+     * @since S60 v3.0
+     * @return none.
+     */
+    void SearchForControlStreamPackets();
+
+    /**
+     * Checks if the buffer contains control stream packets. This is needed
+     * if we receive packets for stream that has not yet received any control
+     * stream packets, so that we do not have to discard the packets. If any
+     * control stream packets are found for a stream that has not been 
+     * initiated, then that control stream packet is used to initiate that
+     * stream.
+     * 
+     * @since S60 v3.0
+     * @return ETrue if a control stream packet was found, EFalse othervise.
+     */
+    TBool CheckBufferForControlStreamPackets();
+
+    /**
+    * Starts flow timer.
+    * @since Series 60 3.0
+    * @param aInterval a timer interval.
+    * @return none.
+    */
+    void StartTimer( const TInt& aInterval );
+    
+    /**
+    * Starts flow timer.
+    * @since Series 60 3.0
+    * @param none.
+    * @return none.
+    */
+    void StopTimer();
+    
+#ifdef VIA_FEA_IPTV_USE_IPDC
+    /**
+    * Serach for fmtp string.
+    * @since Series 60 3.0
+    * @param aSdpData a SDP data.
+    * @return smtp string from SDP.
+    */
+    HBufC8* FindFmtpLC( const TDesC8& aSdpData );
+
+#endif // VIA_FEA_IPTV_USE_IPDC
+
+private: // Data
+
+    /**
+    * XPS packet sink.
+    */
+    CXPSPacketSink* iPacketSink;
+    
+    /**
+    * Status of XPS buffer.
+    */
+    TInt iWaitPlayer;
+    
+    /**
+    * Requested packet after overflow.
+    */
+    TInt iRequested;
+
+    /**
+    * Status for XPS reset.
+    */
+    TBool iXpsResetOk;
+    
+    /**
+    * Status of range.
+    */
+    TBool iRangeKnown;
+
+    /**
+    * Flow control timer.
+    */
+    CCRTimer* iFlowTimer;
+    
+    /**
+    * Audio stream id for XPS.
+    */
+    TInt iAudioStreamId;
+    
+    /**
+    * Audio stream id for XPS.
+    */
+    TInt iVideoStreamId;
+    
+    /**
+    * Sub title stream id for XPS.
+    */
+    TInt iTitleStreamId;
+    
+    /**
+    * TS converter for audio.
+    */
+    CRtpTsConverter* iAudioConv;
+
+    /**
+    * TS converter for video.
+    */
+    CRtpTsConverter* iVideoConv;
+    
+    /**
+    * TS converter for video.
+    */
+    CRtpTsConverter* iTitleConv;
+    
+    /**
+    * RTP packet to enqueue.
+    */
+    CRtpPacket* iRtpPacket;
+    
+#ifdef VIA_FEA_IPTV_USE_IPDC
+    /**
+    * Depacketizer for video stream (ISMACryp).
+    */
+    CH264Mpeg4GenrToFileformat * iVideoDepacketizer;
+
+#endif // VIA_FEA_IPTV_USE_IPDC
+
+#if defined( LIVE_TV_RDEBUG_TRACE ) || defined( LIVE_TV_FILE_TRACE )
+    /**
+    * Debug purposes.
+    */
+    TInt iLogXps;
+
+#endif // LIVE_TV_RDEBUG_TRACE || LIVE_TV_FILE_TRACE
+
+    };
+
+#endif // CCRXPSSINK_H
+
+//  End of File