mmserv/voipaudioservices/inc/JitterBuffer.h
changeset 0 71ca22bcf22a
child 53 eabc8c503852
--- /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