Mercurial > sdl-ios-xcode
view src/audio/symbian/streamplayer.h @ 4287:0620847bf1a8 SDL-1.2
Fixed bug #798
kty@lavabit.com 2009-09-19 14:19:04 PDT
The stable release of SDL 1.2.13 for BeOS/Haiku has a bug in
BE_FindClosestFSMode that causes it to sometimes not select the best mode when
going fullscreen. There are in fact two bugs in the implementation but I will
not go into specifics because there is already a patch for it in the developer
SVN 1.3. However I am still reporting it because I believe the following code
is a better patch for the issue. The current implementation on SVN only works
if it is able to find an exact match for the requested mode. However, by
scanning from lowest-to-highest resolution instead of highest-to-lowest, one
can find the best mode at all times
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 10 Oct 2009 02:11:07 +0000 |
parents | e85e65aec22f |
children |
line wrap: on
line source
#ifndef STREAMPLAYER_H #define STREAMPLAYER_H #include<MdaAudioOutputStream.h> const TInt KSilenceBuffer = 256; class MStreamObs { public: enum { EInit, EPlay, EWrite, EClose, }; virtual void Complete(TInt aState, TInt aError) = 0; }; class MStreamProvider { public: virtual TPtrC8 Data() = 0; }; NONSHARABLE_CLASS(CStreamPlayer) : public CBase, public MMdaAudioOutputStreamCallback { public: CStreamPlayer(MStreamProvider& aProvider, MStreamObs& aObs); ~CStreamPlayer(); void ConstructL(); static TInt ClosestSupportedRate(TInt aRate); TInt OpenStream(TInt aRate, TInt aChannels, TUint32 aType = KMMFFourCCCodePCM16); void SetVolume(TInt aNew); TInt Volume() const; TInt MaxVolume() const; void Stop(); void Start(); void Open(); void Close(); TBool Playing() const; TBool Closed() const; private: void MaoscOpenComplete(TInt aError) ; void MaoscBufferCopied(TInt aError, const TDesC8& aBuffer); void MaoscPlayComplete(TInt aError); private: void Request(); void SetCapsL(); private: MStreamProvider& iProvider; MStreamObs& iObs; TInt iVolume; CMdaAudioOutputStream* iStream; TInt iRate; TInt iChannels; TUint32 iType; enum { ENone = 0, EInited = 0x1, EStarted = 0x2, EStopped = 0x4, EVolumeChange = 0x8, EDied = 0x10 }; TInt iState; TBuf8<KSilenceBuffer> iSilence; TPtrC8 iPtr; }; #endif