Mercurial > sdl-ios-xcode
view src/audio/symbian/streamplayer.h @ 4168:69bcba65c388 SDL-1.2
Fixed bug #526
Comment #1 From Simon Howard 2009-03-20 16:50:56
Hi,
I'm the author of Chocolate Doom, one of the other source ports that James
mentioned. This is a patch against the current SVN version of SDL 1.2 that
fixes the bug. It has been tested and hopefully should be obviously correct
from examining the changes. I'll give a brief explanation.
When the palette is set with SDL_SetPalette, the IDirectDrawPalette_SetEntries
DirectX function is invoked. However, when this happens, a WM_PALETTECHANGED
message is sent to the window.
A WM_PALETTECHANGED message can also be received if the palette is changed for
some other reason, like if the system palette is changed. Therefore, the
palette change handler (DX5_PaletteChanged) has code to deal with this case.
It distinguishes "expected" palette changes (set with SDL_SetPalette) from
"unexpected" palette changes using the colorchange_expected variable, which is
set before calling IDirectDrawPalette_SetEntries. However, the code to set
this variable is missing in the fullscreen code path. By setting this
variable, the palette change is handled properly and the freezes go away.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 13 Apr 2009 00:53:12 +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