diff -r 826cea16efd9 -r 13a33d82ad98 dvrengine/CommonRecordingEngine/inc/CCRRtpRecordSink.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dvrengine/CommonRecordingEngine/inc/CCRRtpRecordSink.h Wed Sep 01 12:20:37 2010 +0100 @@ -0,0 +1,326 @@ +/* +* 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 no-one gets the streaming* +*/ + + + +#ifndef CCRRTPRECORDSINK_H +#define CCRRTPRECORDSINK_H + +// INCLUDES +#include "CCRPacketSinkBase.h" +#include +#include "MCRTimerObserver.h" +#include + +// CONSTANTS +// None + +// MACROS +// None + +// DATA TYPES +// None + +// FORWARD DECLARATIONS +class CCRPacketBuffer; +class CCRStreamingSession; +class MCRConnectionObserver; +class CRtpClipHandler; +class CRtpTsConverter; + +// CLASS DECLARATION + +/** +* Packet sink that does not forward packets. Good for testing. +* +* @lib CommonRecordingEngine.lib +* @since Series 60 3.0 +*/ +class CCRRtpRecordSink : public CCRPacketSinkBase, + public MRtpFileWriteObserver + { + +public: // Constructors and destructors + + /** + * Two-phased constructor. + * @param aRecordParams a recording parameters. + * @param aSinkId that this class needs to use when reporting progress back to owner. + * @param aOwningSession is the streaming session that owns this instance. + * @param aObserver a pointer to connection observer. + * @param aClipHandler a reference pointer to .rtp clip handler. + * @return CCRRtpRecordSink pointer. + */ + static CCRRtpRecordSink* NewL( const SCRRecordParams& aRecordParams, + CCRStreamingSession::TCRSinkId aSinkId, + CCRStreamingSession& aOwningSession, + MCRConnectionObserver* aObserver, + CRtpClipHandler*& aClipHandler ); + + /** + * Destructor + */ + virtual ~CCRRtpRecordSink(); + +protected: // Constructors and destructors + + /** + * By default default constructor is private + * @param aSinkId that this class needs to use when reporting progress back to owner. + * @param aObserver a pointer to connection observer. + * @param aClipHandler a reference pointer to .rtp clip handler. + * @param aOwningSession is the streaming session that owns this instance. + */ + CCRRtpRecordSink( CCRStreamingSession::TCRSinkId aSinkId, + CCRStreamingSession& aOwningSession, + MCRConnectionObserver* aObserver, + CRtpClipHandler*& aClipHandler ); + + /** + * Second phase of 2-phased construction + * @param aRecordParams a recording parameters. + */ + void ConstructL( const SCRRecordParams& aRecordParams ); + +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 CCRPacketSinkBase. + * Method for pause action for sink. + * @since Series 60 3.0 + * @param none. + * @return a system wide error code. + */ + TInt Pause(); + + /** + * From CCRPacketSinkBase. + * Method for restore action for sink. + * @since Series 60 3.0 + * @param none. + * @return a system wide error code. + */ + TInt Restore(); + + /** + * From CCRPacketSinkBase. + * Method for stopping action for sink. + * @since Series 60 3.0 + * @param none. + * @return none. + */ + void Stop(); + + /** + * From MRtpFileWriteObserver. + * Group saved indication. + * @since Series 60 3.0 + * @return none. + */ + void GroupSaved(); + + /** + * From MRtpFileWriteObserver. + * Clip handler status of recording. + * @since Series 60 3.0 + * @param aStatus a status of file writing. + * @return none. + */ + void WriteStatus( const TInt aStatus ); + +private: // New methods + + /** + * Adds RTP packet(s) to a group. + * @since Series 60 3.0 + * @param none. + * @return none. + */ + void AddToGroup(); + + /** + * Adds one RTP packet to a group. + * @since Series 60 3.0 + * @param aPacket a packet data. + * @param aType a packet type. + * @return none. + */ + void AddPacketToGroupL( const TDesC8& aPacket, + const MRtpFileWriteObserver::TRtpType& aType ); + + /** + * Saves one RTP packet group to a clip. + * @since Series 60 3.0 + * @param aAction a saving action. + * @return none. + */ + void SaveGroup( MRtpFileWriteObserver::TRtpSaveAction aAction ); + + /** + * Saves one RTP packet group to a clip. + * @since Series 60 3.0 + * @param aAction a saving action. + * @return none. + */ + void SaveGroupL( MRtpFileWriteObserver::TRtpSaveAction aAction ); + + /** + * Converts stream id to old RTP propriatary format packet type. + * @since Series 60 3.0 + * @param aType a packet type from a clip. + * @param aStream a stream id to update. + * @return true if packet valid, otherwise false. + */ + TBool StreamToType( const MCRPacketSource::TCRPacketStreamId& aStream, + MRtpFileWriteObserver::TRtpType& aType ); + + /** + * Handles TS delta calculation from audio packets. + * @since Series 60 3.0 + * @param aPacket a packet data. + * @return a TS of packet. + */ + TUint TsFromPacketL( const TDesC8& aPacket ); + + /** + * Wrapper for AddPausePacketL(). + * @since Series 60 3.0 + * @param none. + * @return none. + */ + void AddPausePacket(); + + /** + * Adds pause packet to group buffer. + * @since Series 60 3.0 + * @param none. + * @return none. + */ + void AddPausePacketL(); + + /** + * Resets packets group variables. + * @since Series 60 3.0 + * @param aStatus a reason for recording end. + * @return none. + */ + void ForceStopRecording( const TInt& aStatus ); + + /** + * Resets packets group variables. + * @since Series 60 3.0 + * @param none. + * @return none. + */ + void ResetGroupVariables(); + +private: // Data + + /** + * Packets group buffer. + */ + HBufC8* iGroupBuffer; + + /** + * Connection status observer. + */ + MCRConnectionObserver* iObserver; + + /** + * Clip handler for RTP clip. + */ + CRtpClipHandler*& iClipHandler; + + /** + * Packets group pointer. + */ + TPtr8 iGroupPointer; + + /** + * Current group size in bytes. + */ + TInt iGroupSize; + + /** + * Current group packets count. + */ + TInt iPacketsCount; + + /** + * Wanted group size. + */ + TInt iWantedGroup; + + /** + * TS converter for audio. + */ + CRtpTsConverter* iAudioConv; + + /** + * Time stamp of oldest audio packet. + */ + TUint iOldestTs; + + /** + * Latest audio packet. + */ + TPtrC8 iLatestAudio; + + /** + * Record mode, can be either normal of time shift. + */ + MRtpFileWriteObserver:: TRtpSaveAction iSaveMode; + + /** + * Next packet(s) mode, can be: normal, pause, end. + */ + MRtpFileWriteObserver:: TRtpSaveAction iGroupMode; + + /** + * Recording parameters. + */ + MRtpFileWriteObserver::SRtpRecParams iRecParams; + + }; + +#endif // CCRRTPRECORDSINK_H + +// End of File