multimediacommscontroller/mmccavcpayloadformat/inc/avcpayloadformatwrite.h
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmccavcpayloadformat/inc/avcpayloadformatwrite.h	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,127 @@
+/*
+* 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:    The payloadization part of the AVC payloadization/depayloadization plugin
+*
+*/
+
+
+
+
+#ifndef AVCPAYLOADFORMATWRITE_H
+#define AVCPAYLOADFORMATWRITE_H
+
+// include files
+#include<e32base.h>
+#include<e32std.h>
+#include<mmf/server/mmfdatabuffer.h>
+#include<mmf/common/mmfutilities.h>
+
+#include "rtpheader.h"
+#include "mccinternalcodecs.h"
+#include "formatstatemachine.h"
+#include "rfc3984encode.h"
+#include "avcrtpstruct.h"
+
+// Forward declarations
+
+class CRFC3984Encode;
+class TRtpRecvHeader;
+
+
+
+
+// CAvcPayloadFormatWrite class declaration. 
+// The class receives one avc frame and payloadizes it into
+// one ore more RTP packets and gives the packets to the RTP
+// layer
+
+class CAvcPayloadFormatWrite : public CPayloadFormatWrite, public MPayloadFormatWrite
+    {
+	public: 
+	
+		static CAvcPayloadFormatWrite * NewL( MDataSink * aSink);
+		
+		virtual ~CAvcPayloadFormatWrite();
+		
+		// from MPayloadFormatWrite
+		void EmptySourceBufferL( );
+		void SourceBufferEmptiedL( );
+		virtual void SetPayloadType( TUint8 aPayloadType);
+		void CancelUlRequest();
+		
+		// from CMMFFormatEncode (currently for audio, so none of these
+		// is implemented)
+		
+		virtual  TTimeIntervalMicroSeconds FrameTimeInterval( TMediaId aMediaType ) const;
+		virtual  TTimeIntervalMicroSeconds Duration( TMediaId /*aMediaType*/ ) const;
+	
+		// from MDataSink (one of the above public class is derived from it)
+		virtual CMMFBuffer* CreateSinkBufferL( TMediaId aMediaId, 
+                                               TBool &aReference ); 
+        virtual TFourCC SinkDataTypeCode( TMediaId aMediaId );
+        virtual TInt SetSinkDataTypeCode( TFourCC aSinkFourCC, 
+                                              TMediaId aMediaId ); 
+        virtual TInt SinkThreadLogon( MAsyncEventHandler& aEventHandler );
+        virtual void SinkThreadLogoff( );
+        virtual void EmptyBufferL( CMMFBuffer* aBuffer, 
+                                       MDataSource* aSupplier,
+                                       TMediaId aMediaId );
+        virtual void BufferEmptiedL( CMMFBuffer* aBuffer );
+        virtual void SinkPrimeL();
+        virtual void SinkPlayL( );
+        virtual void SinkPauseL( );
+        virtual void SinkStopL( );
+    
+		/**
+        * Configures payload format with format spesific parameters.
+        * Leaves with KErrArgument if parameters are invalid.
+        * @param    aConfigParams       Configuration parameters
+        * @param    aClock
+        */
+        void ConfigurePayloadFormatL( const TDesC8& aConfigParams, 
+                                      CMccRtpMediaClock& aClock );
+        
+	private:
+	
+		CAvcPayloadFormatWrite ( );
+		void ConstructL( MDataSink* aSink);
+		TBool ProcessFramesL();
+		CMMFDataBuffer* CreateSinkBufferOfSizeL( TUint aSize ); 
+    
+    private:
+  
+      	CFormatEncodeStateMachine * iStateMachine;
+      	CMMFDataBuffer * iSourceBuffer;
+      	CRFC3984Encode * iEncoder; 					// payloadization class pointer
+      	CMMFDataBuffer * iSinkBuffer;			// sink buffer 
+      	TRtpSendHeader iRtpSendHeader;   	// RTP Header	
+      	TTimeIntervalMicroSeconds iFrameTimeInterval;
+      	TMediaId iMediaId;
+      	
+      	// Parameters relating to RTP data encoding
+        TMccCodecInfo iCInfo;
+        
+        // Pointer to current sink (redundancy or rtp data sink)
+        MDataSink* iCurDataSink;
+        
+        TBool iIsRtpSink;
+        
+        TUint iSeqNumIncrementer;
+	
+	    #if defined( TEST_EUNIT ) && defined ( __WINSCW__ )
+        friend class UT_CAvcPayloadFormatWrite;
+        #endif
+    };
+
+#endif
\ No newline at end of file