source: trunk/src/winmm/waveoutdart.h@ 10367

Last change on this file since 10367 was 9982, checked in by sandervl, 22 years ago

Waveout (DART): handle underrun properly (next buffer write and position after continueing)

File size: 2.2 KB
Line 
1/* $Id: waveoutdart.h,v 1.4 2003-04-03 14:04:50 sandervl Exp $ */
2
3/*
4 * Wave playback class (DART)
5 *
6 * Copyright 1998-2001 Sander van Leeuwen (sandervl@xs4all.nl)
7 *
8 * Project Odin Software License can be found in LICENSE.TXT
9 */
10#ifndef __DWAVEOUT_H__
11#define __DWAVEOUT_H__
12
13#include "waveoutbase.h"
14
15#define PREFILLBUF_DART 8
16#define DART_BUFSIZE 4096
17
18#ifdef OS2_ONLY
19#include "winmmtype.h"
20#endif
21#include "vmutex.h"
22
23#ifdef _OS2WIN_H
24#define MCI_MIX_BUFFER DWORD
25#define PMCI_MIX_BUFFER MCI_MIX_BUFFER *
26#define MCI_MIXSETUP_PARMS DWORD
27#define MCI_BUFFER_PARMS DWORD
28#define MCI_PLAY_PARMS DWORD
29#endif
30
31class DartWaveOut : public WaveOut
32{
33public:
34 DartWaveOut(LPWAVEFORMATEX pwfx, DWORD fdwOpen, ULONG nCallback, ULONG dwInstance);
35 virtual ~DartWaveOut();
36
37 virtual MMRESULT write(LPWAVEHDR pwh, UINT cbwh);
38 virtual MMRESULT pause();
39 virtual MMRESULT stop();
40 virtual MMRESULT resume();
41 virtual MMRESULT setVolume(ULONG ulVol);
42 virtual MMRESULT reset();
43 virtual ULONG getPosition();
44
45 static BOOL queryFormat(ULONG formatTag, ULONG nChannels,
46 ULONG nSamplesPerSec, ULONG sampleSize);
47
48protected:
49 static void mciError(ULONG ulError);
50 void Init(LPWAVEFORMATEX pwfx);
51 void handler(ULONG ulStatus, PMCI_MIX_BUFFER pBuffer, ULONG ulFlags);
52
53private:
54 void writeBuffer();
55
56 USHORT DeviceId;
57 ULONG ulBufferCount; /* Current file buffer */
58 ULONG ulBufSize;
59
60 MCI_MIX_BUFFER *MixBuffer; /* Device buffers */
61 MCI_MIXSETUP_PARMS *MixSetupParms; /* Mixer parameters */
62 MCI_BUFFER_PARMS *BufferParms; /* Device buffer parms */
63
64 int curPlayBuf, curFillBuf;
65 ULONG curFillPos, curPlayPos; //fillpos == pos in os2 mix buffer, bufpos == pos in win buffer
66
67 BOOL fMixerSetup;
68 BOOL fUnderrun;
69 ULONG ulUnderrunBase;
70
71#ifndef _OS2WIN_H
72 friend LONG APIENTRY WaveOutHandler(ULONG ulStatus, PMCI_MIX_BUFFER pBuffer, ULONG ulFlags);
73#endif
74};
75
76#endif
Note: See TracBrowser for help on using the repository browser.