diff -r 000000000000 -r 1bce908db942 multimediacommscontroller/mmccjitterbuffer/inc/mccjitterbuffer.h --- /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 +#include +#include + +// 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