bluetoothengine/btsac/inc/btsacStreamerController.h
changeset 0 f63038272f30
child 1 6a1fe72036e3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btsac/inc/btsacStreamerController.h	Mon Jan 18 20:28:57 2010 +0200
@@ -0,0 +1,258 @@
+/*
+* Copyright (c) 2005 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:  Declaration for CBTSACStreamerController class. This class constructs and
+*				 communicates with 'BT Audio Streamer' component to do RTP streaming.
+
+*
+*/
+
+
+#ifndef BTSAC_STREAMER_H
+#define BTSAC_STREAMER_H
+
+//  INCLUDES
+
+#include <btaudiostreamer.h>  
+#include <btaudiostreaminputbase.h> 
+#include <bluetoothav.h>		// Protocol definitions, e.g., TSBCCodecCapabilities
+#include "btsacActivePacketDropIoctl.h" 
+#include <SbcEncoderIntfc.h>  // uuid of SBC Encoder
+
+
+class MBTAudioAdaptationObserver
+    {
+    public:
+    virtual void NotifyError(TInt aError) = 0; 
+    };
+
+// CONSTANTS
+
+// DATA TYPES
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+
+/**
+*  
+*  
+*  
+*/
+
+class TBitpoolData
+	{
+public:
+	TInt iMaxBitpoolValue;
+	TInt iMaxDeviation;
+	//TInt iUpgradeDelay;
+	TInt iIndex;
+	TInt iDownBitpoolIndex;
+	TInt iUpBitpoolIndex;
+	TBool iMinimumMaxBitpool;
+	};
+
+NONSHARABLE_CLASS(CBTSACStreamerController) : public CActive, MBTAudioErrorObserver, MActivePacketDropIoctlObserver
+    {
+ public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        * 
+        * 
+        * 
+        */
+        static CBTSACStreamerController* NewL(MBTAudioAdaptationObserver& aObserver);
+        
+        /**
+        * Destructor.
+        * 
+        * 
+        */
+        virtual ~CBTSACStreamerController();
+        
+  public:
+		// From MBTAudioErrorObserver
+		virtual TInt Error(const TInt aError); 
+
+		// From MActivePacketDropIoctlObserver
+    	virtual void PacketsDropped(TInt aPacketCount);
+
+  
+  public: // New functions
+        
+        /**
+        * 
+        * 
+        * @param aStatus            
+        * @return                   None.
+        */
+        TInt StartStream(RSocket& aSocket, TInt aFrameLength);
+        
+        /**
+        * 
+        * 
+        * @param aStatus            
+        * @return                   None.
+        */
+        TInt StopStream();
+        
+        /**
+        * 
+        * 
+        * @param aStatus            
+        * @return                   None.
+        */
+        void ResetAudioInput();
+        
+        /**
+        * 
+        * 
+        * @param aStatus            
+        * @return                   None.
+        */
+        TInt FillCapabilities( TSBCCodecCapabilities& aSbc );
+        
+        /**
+        * 
+        * 
+        * @param aStatus            
+        * @return                   None.
+        */
+        TInt ConfigureSEP( TSBCCodecCapabilities& aDec );
+        
+        /**
+        * 
+        * 
+        * @param aStatus            
+        * @return                   None.
+        */
+        TInt FrameLength() const;
+        
+        /**
+        * 
+        * 
+        * @param none
+        * @return                   TSBCCodecCapabilities.
+        */
+        TSBCCodecCapabilities &GetCaps();
+        
+    protected:  // Functions from CActive
+    
+        /**
+        * RunL is called by framework after request is being completed.
+        * @param nones
+        * @return none 
+        */    
+    	void RunL();
+    	
+        /**
+        * DoCancel() has to be implemented by all the classes deriving CActive.
+        * Request cancellation routine.
+        * @param none
+        * @return none 
+        */
+    	void DoCancel();
+
+    	/**
+    	* RunError is called if RunL() leaves
+    	*/
+        TInt RunError(TInt aError);
+
+                                 
+	private: // Data definitions
+
+        enum TBTSACStreamingState
+        	{
+        		EStateStreaming,
+        		EStateIdle,
+        		EStateError
+        	};
+ 		
+ 		typedef enum EOngoingAction
+			{
+			ENone,
+			EErrorSending,
+			EDowngradeBitrate,
+			EUpgradeBitrate,
+			EStartStabilizingTimer,
+			EStabilize
+			};
+			
+     private:
+
+        /**
+        * C++ default constructor.
+        */
+        CBTSACStreamerController(MBTAudioAdaptationObserver& aObserver);
+
+        /**
+        * Symbian 2nd phase constructor.
+        * 
+        * 
+        * 
+        * 
+        */
+        void ConstructL();
+		
+		void CheckAndAdjustBitpool(TSBCCodecCapabilities& aDec);
+		TInt GetMatchingCaps(TSBCCodecCapabilities& aCaps);
+		TInt ConfigureSEPBitpool(EOngoingAction aAction);
+		void DoSelfComplete(EOngoingAction aAction, TInt aError);
+		
+		void SetBlockLen(TSBCCodecCapabilities& aCap, TUint8 aBlockLen);
+		TInt GetBlockLen(TSBCCodecCapabilities& aCap) const;
+		void SetSamplingFrequency(TSBCCodecCapabilities& aCap, TUint8 aFrequency);
+		TInt GetSamplingFrequency(TSBCCodecCapabilities& aCap) const;
+		TInt FrameLengthFormula(TSBCCodecCapabilities& aCap) const;
+		TInt GetNumOfChannels(TSBCCodecCapabilities& aCap) const;
+		void SetNumOfSubbands(TSBCCodecCapabilities& aCap, TUint8 aNumOfSubbands);
+		TInt GetNumOfSubbands(TSBCCodecCapabilities& aCap) const;		
+		void SetBitpoolValues(TSBCCodecCapabilities& aCap);
+		void SetAllocationMethod(TSBCCodecCapabilities& aCap, TUint8 aAllocationMethod);
+		void SetChannelMode(TSBCCodecCapabilities& aCap, TUint8 aChannelMode);
+		
+		TInt SetCurrentBitpoolData(TInt aBitpool);
+		void InitializeBitpoolDataL();
+		void ReorganizeBitpoolTable(TInt aNegotiatedMaxBitpool);
+		TBitpoolData* GetBitpoolData(TInt aIndex);
+		TInt GetIndex(TInt aBitpool);
+		TBool IndexValid(TInt aIndex);
+        
+	private:    // Data
+        
+		CBTAudioStreamer* iBTStreamer;  // Bluetooth Audio Streamer component
+		CBTAudioStreamInputBase* iAudioInput;
+    	TBTSACStreamingState iState;
+    	EOngoingAction iOngoingAction;
+    	TSBCCodecCapabilities iLocalCap; // local copy of Audio Adapatation capabilities
+    	TSBCCodecCapabilities iMatchCap; // local copy of capabilites used to configure accessory
+    	RLibrary iLib;  // for loading BTAudioStreamer and BTAudioAdaptation dll
+    	TInt iCurrentBitrate; 
+    	TInt iCurrentFrameLength;
+		RTimer iTimer;
+		CActivePacketDropIoctl* iPacketDropIoctl; 
+		RThread iThread;
+		CSbcEncoderIntfc *iEncoderCI;
+		MBTAudioAdaptationObserver& iObserver;
+		TInt iTotalNbrOfDroppedPackets;
+		TTime iFirstPacketDropTime; 
+		TInt iPacketDropDeviation;
+		RArray<TBitpoolData> iBitpoolData;
+		TBitpoolData* iCurrentBitpoolData;
+    };
+
+
+#endif      // BTSAC_STREAMER_H
+            
+// End of File
\ No newline at end of file