1 // --------------------------------------------------------------------------
5 // Author: Guilhem Lavaux <lavaux@easynet.fr> (C) 1999
7 // --------------------------------------------------------------------------
12 #include "wx/mmedia/sndbase.h"
14 typedef struct _wxSoundInternal wxSoundInternal
;
15 typedef struct _wxSoundInfoHeader wxSoundInfoHeader
;
17 // class WXDLLEXPORT wxSoundInternal;
18 class WXDLLEXPORT wxSoundStreamWin
: public wxSoundStream
{
23 wxSoundStream
& Write(const void *buffer
, wxUint32 len
);
24 wxSoundStream
& Read(void *buffer
, wxUint32 len
);
26 bool SetSoundFormat(wxSoundFormatBase
& base
);
28 bool StartProduction(int evt
);
29 bool StopProduction();
31 bool QueueFilled() const;
33 // Internal but defined as public
34 void NotifyDoneBuffer(wxUint32 dev_handle
, int flag
);
36 wxUint32
GetBestSize() const { return 4096; }
39 wxSoundInternal
*m_internal
;
40 wxUint32 m_current_frag_in
, m_current_frag_out
;
41 wxUint32 m_input_frag_in
, m_output_frag_out
;
42 wxSoundInfoHeader
**m_headers_play
, **m_headers_rec
;
44 bool m_production_started
, m_queue_filled
, m_waiting_for
;
47 void CreateSndWindow();
48 void DestroySndWindow();
49 bool OpenDevice(int mode
);
52 wxSoundInfoHeader
*AllocHeader(int mode
);
53 void FreeHeader(wxSoundInfoHeader
*header
, int mode
);
54 bool AllocHeaders(int mode
);
55 void FreeHeaders(int mode
);
57 void WaitFor(wxSoundInfoHeader
*info
);
58 bool AddToQueue(wxSoundInfoHeader
*info
);
59 void ClearHeader(wxSoundInfoHeader
*info
);
61 wxSoundInfoHeader
*NextFragmentOutput();
62 wxSoundInfoHeader
*NextFragmentInput();