--- /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