diff -r 000000000000 -r 71ca22bcf22a mmserv/voipaudioservices/inc/JitterBuffer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/voipaudioservices/inc/JitterBuffer.h Tue Feb 02 01:08:46 2010 +0200 @@ -0,0 +1,248 @@ +/* + * Copyright (c) 2008 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 : VoIPJitterBuffer.lib + * + */ + +#ifndef __VOIPJITTERBUFFER_H +#define __VOIPJITTERBUFFER_H + +// DATA TYPES + +// FORWARD DECLARATIONS +class CMccCnGenerator; +class CVoIPJitterBufferImpl; +class TVoIPJBConfig; +class MJitterBufferObserver; + +// CLASS DECLARATION + +/** + * Jitter buffer. + * + * @lib VoIPJitterBuffer.lib + * @since Series 60 5.0 + */ +class CVoIPJitterBuffer : public CActive + { +private: + /** + * Jitter buffer states + */ + enum TJBState + { + EJBufStopped, + EJBufPlaying, + EJBufPaused + }; + + /** + * Transition states during JB playback + */ + enum TJBTransitionState + { + EWait, + // ENeedData, + EEmptyData + }; + +public: + // Constructors and destructor + + /** + * Two-phased constructor. + */ + IMPORT_C static CVoIPJitterBuffer* NewL(MJitterBufferObserver* aObserver); + + /** + * Destructor. + */ + virtual ~CVoIPJitterBuffer(); + +public: + // Methods + + /** + * SetupL + * Sets codec information and initializes JB. + * @since Series 60 5.0 + * @param TFourCC - codec's fourcc + * @param TVoIPJBConfig& - JB configuraion parameters + * @return void + */ + IMPORT_C void SetupL(const TFourCC aCodec, const TVoIPJBConfig& aJBConfig); + + /** + * ResetBuffer + * Resets JB to its original state with no data. + * @since Series 60 5.0 + * @param TBool - ETrue == tone is to be played + * @return void + */ + IMPORT_C void ResetBuffer(TBool aPlayTone = ETrue); + + /** + * Delay Down + * + * @since Series 60 5.0 + * @param none + * @return void + */ + IMPORT_C void DelayDown(); + + /** + * Delay Up + * + * @since Series 60 5.0 + * @param none + * @return void + */ + IMPORT_C void DelayUp(); + + /** + * Play + * + * @since Series 60 5.0 + * @param none + * @return void + */ + IMPORT_C void Play(); + + /** + * Pause + * + * @since Series 60 5.0 + * @param none + * @return void + */ + IMPORT_C void Pause(); + + /** + * Stop + * + * @since Series 60 5.0 + * @param none + * @return void + */ + IMPORT_C void Stop(); + + /** + * FillBuffer + * Retrieves next frame from JB queue. + * @since Series 60 5.0 + * @param CMMFBuffer* - buffer to be filled with data from the JB + * @return TInt + */ + IMPORT_C TInt FillBuffer(CMMFBuffer* aBuffer); + + /** + * EmptyBufferL + * Queues received frame in JB. + * @since Series 60 5.0 + * @param CMMFBuffer* - buffer to be queued in the JB + * @return TInt + */ + IMPORT_C TInt EmptyBuffer(CMMFBuffer* aBuffer); + +private: + + /** + * C++ default constructor. + */ + CVoIPJitterBuffer(MJitterBufferObserver* aObserver); + + /** + * Symbian 2nd phase constructor. + */ + void ConstructL(); + + /** + * from CActive + */ + void DoCancel(); + + /** + * from CActive + */ + void RunL(); + + /** + * from CActive + */ + TInt RunError(TInt aError); + +private: + // Internal helper methods + + /** + * Play current frame from JB. + * @since Series 60 5.0 + * @param none + * @return void + */ + void PlayBuffer(); + + /** + * TransitionState + * @since Series 60 5.0 + * @param TJBTransitionState + * @param TUint32 + * @return void + */ + void TransitionState(TJBTransitionState aTransitionState, + TUint32 aStateChangeDelay = 0); + + /** + * Calculates the time interval at which data rate should be slowed down + * when subsequent EmptyBufferL calls are coming too fast. + * @since Series 60 5.0 + * @param none + * @return Suggested delay in microseconds. + */ + TUint32 DetermineEmptyBufferDelay(); + +private: + // Data + + // Jitter buffer Implementation + CVoIPJitterBufferImpl* iJitterBufferImpl; + + // Pointer to databuffer + CMMFBuffer* iPlayBuffer; + + // Jitterbuffer state + TJBState iState; + + // JB Transition State + TJBTransitionState iTransitionState; + + MJitterBufferObserver* iObserver; + TFourCC iCodec; + + RTimer iTimer; + TTime iTmCurrentEmptyBuffer; + TTime iTmPreviousEmptyBuffer; + + TUint32 iSampleInterval; + TUint32 iEmptyBufferDelayThreshold; + + // Current request size of the buffer + TInt iRequestSize; + + }; + +#endif //__VOIPJITTERBUFFER_H + +// End of file