multimediacommscontroller/mmccavcpayloadformat/inc/avcpayloadformatread.h
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmccavcpayloadformat/inc/avcpayloadformatread.h	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,192 @@
+/*
+* 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 depayloadization part of the AVC payloadization/depayloadization plugin
+*
+*/
+
+
+
+
+#ifndef AVCPAYLOADFORMATREAD_H
+#define AVCPAYLOADFORMATREAD_H
+
+//  INCLUDES
+#include <E32Base.h>
+#include <e32std.h>
+#include <mmf/server/mmfdatabuffer.h>
+#include <mmf/common/mmfutilities.h>
+#include <ecom/ImplementationProxy.h>
+#include "rtpheader.h"
+#include "rfc3984decode.h"
+#include "formatstatemachine.h"
+
+
+// classes forward decleration
+
+//class CRFC3984Decode;
+class TRtpRecvHeader;
+
+// CLASS DECLARATION
+
+#define KAvcMaxRxPacketSize 10000
+
+
+/**
+*  The CAvcPayloadFormatRead class implements the MMF format plugin for decoding of RTP payload
+*  format for AVC codec.  Refer to IETF RFC3984 for RTP Payload format for AVC codec.
+*  This class receives AVC payload data from an RTP packet, depayloadizes it and passes it to the jitter buffer
+*
+*  @lib ?library
+*  @since Series 60 3.0
+*/ 
+class CAvcPayloadFormatRead : public CPayloadFormatRead, public MPayloadFormatRead
+{
+
+  public:  // Constructors and destructor
+        /**
+        * Two-phased constructor.
+        * @param aSource    Source of the data for the payload format plugin
+        */
+        static   CAvcPayloadFormatRead* NewL ( MDataSource* aSource );
+
+        /**
+        * Destructor.
+        */
+        virtual  ~CAvcPayloadFormatRead ( );
+
+        virtual void InitializeL(  );
+        
+        void FillBufferL( CMMFBuffer* aBuffer, MDataSink* aConsumer, 
+                                         TMediaId aMediaId );
+       
+
+        virtual void CancelDlRequest( );
+
+        void SendDataToSinkL( );
+
+     
+      
+        void FillSourceBufferL( );
+        
+       virtual void SetPayloadType( TUint8 aPayloadType );
+       
+       virtual TInt SourceThreadLogon( MAsyncEventHandler& aEventHandler );
+       virtual void SourceThreadLogoff( );
+       virtual void NegotiateSourceL( MDataSink& aDataSink );
+       
+       virtual void BufferFilledL( CMMFBuffer* aBuffer, 
+                                           const TRtpRecvHeader& aRtpHeader );
+       
+       TFourCC SourceDataTypeCode( TMediaId aMediaId );
+       TInt SetSourceDataTypeCode( TFourCC aSourceFourCC, 
+                                                   TMediaId aMediaId );
+
+	   void FillSinkBufferL( );
+	   
+	   virtual CMMFBuffer* CreateSourceBufferL( TMediaId aMediaId, TBool &aReference );
+	   
+	   
+	   void SourcePrimeL( );
+	   void SourcePlayL();
+	   void SourcePauseL();
+	   void SourceStopL();
+	   
+	   void UseRTPInfoExtension();
+	   
+	  
+	// from CPayloadFormatRead
+	
+	virtual void ConfigurePayloadFormatL( const TDesC8& aConfigParams );  
+    
+    
+   // from CMMFFormatDecode
+   
+    /**
+        * Return the frame time interval for the given media
+        *
+        * @param aMediaType KUidMediaTypeAudio or KUidMediaTypeVideo
+        *
+        * @return           Time interval in micro seconds
+        */
+        virtual TTimeIntervalMicroSeconds FrameTimeInterval( TMediaId aMediaType ) const;
+
+        /**  *** NOT SUPPORTED ***
+        * Return the clip duration for the given media
+        *
+        * @param aMediaType KUidMediaTypeAudio or KUidMediaTypeVideo
+        *
+        * @return           Clip duration in micro seconds
+        */
+        virtual  TTimeIntervalMicroSeconds Duration( TMediaId aMediaType ) const;
+        
+        virtual  TUint Streams(TUid aMediaType) const;
+        
+   
+   
+   	/**
+        * From CMMFFormatDecode
+        */
+        TFourCC SinkDataTypeCode( TMediaId aMediaId );
+        
+   // From MDataSink
+   
+   protected:
+   
+     TFourCC iFourCC;  
+   
+   private:
+   
+   CAvcPayloadFormatRead ( );
+   void ConstructL(MDataSource* aSource);
+   CMMFBuffer* CreateSourceBufferNowL( TMediaId aMediaId, TBool &aReference );
+   
+   CRFC3984Decode * iDecoder;  	// depayloadization class pointer
+ 					 	// contains H264
+   MDataSource* iRtpDataSource; // data source
+   MDataSource * iCurDataSource; // currently pointed data source, same as RTP Data Source
+   
+   TBool iBufferToReadExists;
+   TBool iFillRequested;
+   
+   // Data sink who requested "FillBuffer".
+   MDataSink* iSink;
+   
+   // RTP Header
+		TRtpRecvHeader iRecvHeader;
+   
+   TMediaId iMediaId;
+   
+   // Format decoding state machine
+   CFormatDecodeStateMachine* iStateMachine;  
+   
+   // Count of depayloadized NAL units
+   TInt iNalCount;
+   TInt iNalSent;
+   
+   // DG: Use to provide several packets at a time to the jitter buffer
+   TInt iCounter;
+   
+
+   CMMFDataBuffer * iPayloadBuffer;  	// Sink Buffer -- data comes into this buffer, is depacketized 
+   CMMFDataBuffer * iFrameBuffer; 		// Source Buffer -- data is put in this buffer after depacketization and given to data path
+   
+   // Payload types to expect including PTs for redundancy encodings
+		RArray<TUint8> iPayloadTypes;
+	
+	TBool iUsingJitterBufferExtension;		// indicates if using jitter buffer extension structure
+  
+   
+};
+
+#endif