diff -r 000000000000 -r 29b1cd4cb562 bluetooth/gavdp/test/tavsrcStreamer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetooth/gavdp/test/tavsrcStreamer.h Fri Jan 15 08:13:17 2010 +0200 @@ -0,0 +1,193 @@ +// Copyright (c) 2007-2009 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: +// + +#ifndef TAVSRCSTREAMER_H +#define TAVSRCSTREAMER_H + +#include "tavsrc.h" +#include "tavsrcTimer.h" +#include "tavsrcStreamerUser.h" + +#include +#include + +static const TInt KLowTidemark = 2; +static const TInt KSendBucketSize = 2; + +#ifdef __WINS__ +_LIT(KSBCFileRoot, "c:\\"); +_LIT(KSBCFiles, "c:\\*.sbc"); +#else +//For reference boards, use the MMC drive, because C: is formatted every reboot +_LIT(KSBCFileRoot, "e:\\"); +_LIT(KSBCFiles, "e:\\*.sbc"); +#endif + +class CProgressBar; +class CStreamerUI; +class CActiveSockWriter; +class CActiveSockReader; + +class TSbcTrackFrameInfo + { +public: + TInt iFrameSize; + TUint iFrameCount; + }; + +// used to keep track of the sizes of the SBC frames to allow going backwards through +// an SBC file on a frame by frame basis. This is require to support VBR where the +// frame sizes can change for a single track. +class CSbcTrackInfo : public CBase + { +public: + ~CSbcTrackInfo(); + + TInt GetLastFrameSize(); + TInt AddNewFrame(TInt aFrameSize); + TInt RemoveLastFrame(); + void Reset(); + +private: + RArray iFrameInfo; + }; + +class CActiveStreamer : public CBase, private MAdaptiveHighResPeriodicClient + { +public: + static CActiveStreamer* NewL(RSocketArray aSockets, + CConsoleBase& aConsole, + MActiveStreamerUser& aUser, + TUint aDisplayMode, + TBool aPreloadFile); + + ~CActiveStreamer(); + + static void RTPCallbackL(CActiveStreamer* aStreamer, const TRtpEvent& aEvent); + + // streamer operations + void Stream(TBool aIsSink); + void Suspend(); + void ReStream(); + void Stop(); + void Pause(); + void Faster(); + void Slower(); + void Backward(); + void Forward(); + void NextTrack(); + void PrevTrack(); + +private: + enum TDisplayMode + { + EStatusCommandWindows = 0x00, + EStreamerInfoWindow = 0x01, + EProgressBarWindow = 0x02, + EPlaylistWindow = 0x04, + EChunkyIconWindow = 0x08, + }; + +private: + CActiveStreamer(CConsoleBase& aConsole, MActiveStreamerUser& aUser, TUint aDisplayMode, TBool aPreloadFile); + + void TimerEvent(CAdaptiveHighResPeriodic& aTimer); + void TimerError(CAdaptiveHighResPeriodic& aTimer, TInt aError); + void StartSinkL(); + + void ConstructL(RSocketArray aSockets); + TInt LoadFile(); + void DoTimerEvent(); + void DestroyBucket(); + void InitL(); + + void CreateBucketL(); + void FillBucket(); + void Drip(); + void DrawBucket(); + void CheckJammed(); + + void UpdateFrameInfo(); + +private: + CConsoleBase& iConsole; + TInt iProgressBarPos; + CProgressBar* iProgressBar; + CStreamerUI* iStreamerUI; + CConsoleBase* iStreamingInfoConsole; + CAdaptiveHighResPeriodic* iTimer; + + RFile iFile; + RFs iRFs; + CDir* iFiles; + TInt iCurrentFile; + RSocketArray iSockets; + TInt iMTU; + TInt iFileSize; + TTime iStartTime; + + RRtpSession iSession; + RRtpSendSource iSendSource; + RRtpReceiveSource iReceiveSource; + + RArray iSendPackets; // used like a queue sometimes + TRtpEventType iEventType; + TBool iRTPCanSend; + + TInt iSBCFrameBytesPerRTP; + TInt iSBCFrameSize; + TInt iSBCFrameInterval; + TInt iNumSBCFramesInRTP; + TInt iSBCBitrate; + TInt iSendClockInterval; // microsecs + TInt iNominalSendClockInterval;// microsecs + TBool iBonusDrip; + TTime iStartedTime; // for "absolute" timing style + + // checking for jammed streamer, and leaky mbufs + TInt iBucketAppearsJammed; + TBool iBucketJammed; + TTime iLastPacketSentTime; + TInt iPreviousFillLevel; + + TInt iPos; + TInt iFailedSend; + TInt iSent; + TInt iFillLevel; + + HBufC8* iFileBuf; + + // current SEP configuration + TInt iNumChannels; + TInt iChMode; + TInt iNumSubbands; + TInt iBlkLen; + TInt iBitPool; + TInt iFreq; + TInt iAllocMethod; + + MActiveStreamerUser& iUser; + + TUint iDisplayMode; + TBool iPreloadFile; + + CSbcTrackInfo iSbcTrackInfo; + + TInt iSbcFrameRate; + + TBool iDirectionForward; + }; + +#endif // TAVSRCSTREAMER_H