multimediacommscontroller/mmccjitterbuffer/inc/mccjitterbuffer.h
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmccjitterbuffer/inc/mccjitterbuffer.h	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,303 @@
+/*
+* Copyright (c) 2004-2007 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:    Jitter buffer for audio frames.
+*  Interface   : 
+*
+*/
+
+
+
+
+#ifndef MCCJITTERBUFFER_H
+#define MCCJITTERBUFFER_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <mmf/server/mmfdatasink.h>
+#include <mmf/server/mmfdatasource.h>
+
+// FORWARD DECLARATIONS
+class CMccJitterBufferImpl;
+class TMccCodecInfo;
+class MJitterBufferObserver;
+
+// CLASS DECLARATION
+
+/**
+*  Jitter buffer.
+*
+*  @lib MMccJitterBuffer.lib
+*  @since Series 60 3.0
+*/
+class CMccJitterBuffer : public CBase, public MDataSink, public MDataSource
+    {
+    private:
+        /**
+        * Jitterbuffer states
+        */
+        enum TJitterBufferState 
+    	    {
+            EJBufStopped,
+            EJBufPrimed,
+            EJBufPlaying,
+            EJBufPaused
+            };
+                
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        IMPORT_C static CMccJitterBuffer* NewL( MJitterBufferObserver* aObserver = NULL );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CMccJitterBuffer();
+
+    public: // Methods
+
+        /**
+        * Setup Jitterbuffer
+        * @since Series 60 3.0
+        * @param aPayloadSize Initial size of the jitterbuffer in milliseconds
+        * @param aPlayoutThreshold Initial playout threshold of the jitterbuffer
+        * @param aCInfo Codec information class to pass info about used codec
+        * @return void
+        */    
+        IMPORT_C void SetupL( TInt aBufferSize, TInt aPlayoutThreshold, 
+                const TMccCodecInfo& aCInfo );
+
+        /**
+        * Reset Jitterbuffer
+        * @since Series 60 3.0
+        * @param aPlayTone ETrue, if tone is to played
+        * @return void
+        */    
+        IMPORT_C void ResetBuffer( TBool aPlayTone = ETrue );
+
+        /**
+        * Delay Down
+        * @since Series 60 3.0
+        * @param none
+        * @return void
+        */    
+    	IMPORT_C void DelayDownL();
+
+        /**
+        * Delay Up
+        * @since Series 60 3.0
+        * @param none
+        * @return void
+        */    
+    	IMPORT_C void DelayUpL();
+    	
+    	/**
+        * Add datasink. This should be the MMF Audio Output MDataSink plug-in 
+        * @since Series 60 3.0
+        * @param [input] aSink Sink to be added
+        * @return void
+        */
+        IMPORT_C void AddDataSinkL( MDataSink* aSink );
+
+    	/**
+        * Add a datasource. This should be the Mcc DL Datapath.
+        * @since Series 60 3.0
+        * @param [input] aSource Source to be added
+        * @return void
+        */
+        IMPORT_C void AddDataSourceL( MDataSource* aSource );
+
+    	/**
+        * Returns the current datasink pointer
+        * @since Series 60 3.0
+        * @param none
+        * @return MDataSink
+        */
+    	IMPORT_C MDataSink* GetDataSink();
+
+    public: // Functions from base classes    
+           
+        /**
+        * From MDataSink
+        */
+    	TInt SetSinkDataTypeCode( TFourCC aCodec, TMediaId aMedia );	     
+            
+        /**
+        * From MDataSource
+        */
+    	TInt SetSourceDataTypeCode( TFourCC aCodec, TMediaId aMedia );        
+            
+        /**
+        * From MDataSink
+        */
+    	TFourCC SinkDataTypeCode( TMediaId aMediaId ); 
+    	
+        /**
+        * From MDataSource
+        */
+    	TFourCC SourceDataTypeCode( TMediaId aMediaId ); 
+    	
+        /**
+        * From MDataSink
+        */
+    	void ConstructSinkL( const TDesC8& aInitData );	
+    	
+        /**
+        * From MDataSource
+        */
+    	void ConstructSourceL( const TDesC8& aInitData );	
+    	
+        /**
+        * From MDataSink
+        */
+    	TInt SinkThreadLogon( MAsyncEventHandler& aEventHandler );
+    	
+        /**
+         * From MDataSource
+        */	
+    	TInt SourceThreadLogon( MAsyncEventHandler& aEventHandler );
+    	
+        /**
+        * From MDataSink
+        */	
+    	void SinkThreadLogoff();
+    	
+        /**
+        * From MDataSink
+        */
+    	void SinkPrimeL(); 
+    	
+        /**
+        * From MDataSink
+        */                       
+    	void SinkPlayL();
+    	
+        /**
+        * From MDataSink
+        */
+    	void SinkPauseL();	 
+    	
+        /**
+        * From MDataSink
+        */
+    	void SinkStopL(); 		 
+
+        /**
+        * From MDataSink
+        */
+    	TBool CanCreateSinkBuffer();
+    	
+        /**
+        * From MDataSource
+        */
+    	TBool CanCreateSourceBuffer();	
+    	
+        /**
+        * From MDataSource
+        */
+    	CMMFBuffer* CreateSourceBufferL( TMediaId aMediaId, TBool &aReference );		
+    	
+        /**
+        * From MDataSink
+        */
+    	CMMFBuffer* CreateSinkBufferL( TMediaId aMediaId, TBool &aReference );
+    	
+        /**
+        * From MDataSource
+        */	
+        void FillBufferL( CMMFBuffer* aBuffer, MDataSink* aConsumer,
+                TMediaId aMediaId );
+                          	
+        /**
+        * From MDataSink
+        */	
+    	void EmptyBufferL( CMMFBuffer* aBuffer, MDataSource* aSupplier,
+                TMediaId aMediaId ); 	                    		
+     
+        /**
+        * From MDataSink
+        */
+        void BufferFilledL( CMMFBuffer* aBuffer );
+
+        /**
+        * From MDataSource
+        */
+        void BufferEmptiedL( CMMFBuffer* aBuffer );
+        
+        /**
+        * From MDataSink
+        */
+        void NegotiateL( MDataSource& aDataSource );
+
+    private:	
+
+        /**
+        * C++ default constructor.
+        */
+        CMccJitterBuffer( MJitterBufferObserver* aObserver );	
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    private: // New functions
+    	
+    	/**
+        * Send jitter buffer event.
+        * @return void
+        */
+    	void SendJitterBufferEventToClient();
+        
+    private: // Data
+
+        // Datasink
+        MDataSink* iDataSink;
+        
+    	// Datasource
+        MDataSource* iDataSource;
+        
+    	// Jitter buffer Implementation
+    	CMccJitterBufferImpl* iBufferImpl;
+
+        // Pointer to databuffer
+        CMMFBuffer* iSinkBuffer;
+
+    	// Jitterbuffer state
+    	TJitterBufferState iState;
+
+        // ETrue if MMF owns the databuffer
+    	TBool iSnkBufRef;
+        
+        // Asynchronous event handler
+        MAsyncEventHandler* iEventHandler;
+        
+        // Frames played
+        TUint iPlayedFrames;
+        
+        MJitterBufferObserver* iObserver;
+
+        // Current request size of the buffer
+        TInt iRequestSize;
+        
+        // Friend class for EUNIT tests
+        #ifdef TEST_EUNIT
+            friend class UT_CMccJitterBuffer;
+        #endif
+    };
+
+#endif  //MCCJITTERBUFFER_H
+
+// End of File