dsound_private.h
来自「一个类似windows」· C头文件 代码 · 共 527 行 · 第 1/2 页
H
527 行
/* DirectSound * * Copyright 1998 Marcus Meissner * Copyright 1998 Rob Riggs * Copyright 2000-2001 TransGaming Technologies, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *//* Linux does not support better timing than 10ms */#define DS_TIME_RES 10 /* Resolution of multimedia timer */#define DS_TIME_DEL 10 /* Delay of multimedia timer callback, and duration of HEL fragment */#define DS_HEL_FRAGS 48 /* HEL only: number of waveOut fragments in primary buffer * (changing this won't help you) *//* wine spec */#include "dxroslayer/dxros_layer.h"/* direct sound hardware acceleration levels */#define DS_HW_ACCEL_FULL 0 /* default on Windows 98 */#define DS_HW_ACCEL_STANDARD 1 /* default on Windows 2000 */#define DS_HW_ACCEL_BASIC 2#define DS_HW_ACCEL_EMULATION 3extern int ds_emuldriver;extern int ds_hel_margin;extern int ds_hel_queue;extern int ds_snd_queue_max;extern int ds_snd_queue_min;extern int ds_hw_accel;extern int ds_default_playback;extern int ds_default_capture;/***************************************************************************** * Predeclare the interface implementation structures */typedef struct IDirectSoundImpl IDirectSoundImpl;typedef struct IDirectSound_IUnknown IDirectSound_IUnknown;typedef struct IDirectSound_IDirectSound IDirectSound_IDirectSound;typedef struct IDirectSound8_IUnknown IDirectSound8_IUnknown;typedef struct IDirectSound8_IDirectSound IDirectSound8_IDirectSound;typedef struct IDirectSound8_IDirectSound8 IDirectSound8_IDirectSound8;typedef struct IDirectSoundBufferImpl IDirectSoundBufferImpl;typedef struct IDirectSoundCaptureImpl IDirectSoundCaptureImpl;typedef struct IDirectSoundCaptureBufferImpl IDirectSoundCaptureBufferImpl;typedef struct IDirectSoundFullDuplexImpl IDirectSoundFullDuplexImpl;typedef struct IDirectSoundNotifyImpl IDirectSoundNotifyImpl;typedef struct IDirectSoundCaptureNotifyImpl IDirectSoundCaptureNotifyImpl;typedef struct IDirectSound3DListenerImpl IDirectSound3DListenerImpl;typedef struct IDirectSound3DBufferImpl IDirectSound3DBufferImpl;typedef struct IKsBufferPropertySetImpl IKsBufferPropertySetImpl;typedef struct IKsPrivatePropertySetImpl IKsPrivatePropertySetImpl;typedef struct PrimaryBufferImpl PrimaryBufferImpl;typedef struct SecondaryBufferImpl SecondaryBufferImpl;typedef struct IClassFactoryImpl IClassFactoryImpl;typedef struct DirectSoundDevice DirectSoundDevice;typedef struct DirectSoundCaptureDevice DirectSoundCaptureDevice;/***************************************************************************** * IDirectSound implementation structure */struct IDirectSoundImpl{ /* IUnknown fields */ const IDirectSound8Vtbl *lpVtbl; LONG ref; DirectSoundDevice *device; LPUNKNOWN pUnknown; LPDIRECTSOUND pDS; LPDIRECTSOUND8 pDS8;};struct DirectSoundDevice{ LONG ref; GUID guid; PIDSDRIVER driver; DSDRIVERDESC drvdesc; DSDRIVERCAPS drvcaps; DWORD priolevel; PWAVEFORMATEX pwfx; HWAVEOUT hwo; LPWAVEHDR pwave[DS_HEL_FRAGS]; UINT timerID, pwplay, pwwrite, pwqueue, prebuf, precount; DWORD fraglen; PIDSDRIVERBUFFER hwbuf; LPBYTE buffer; DWORD writelead, buflen, state, playpos, mixpos; BOOL need_remix; int nrofbuffers; IDirectSoundBufferImpl** buffers; RTL_RWLOCK buffer_list_lock; CRITICAL_SECTION mixlock; PrimaryBufferImpl* primary; DSBUFFERDESC dsbd; DWORD speaker_config; LPBYTE tmp_buffer; DWORD tmp_buffer_len; /* DirectSound3DListener fields */ IDirectSound3DListenerImpl* listener; DS3DLISTENER ds3dl; BOOL ds3dl_need_recalc;};/* reference counted buffer memory for duplicated buffer memory */typedef struct BufferMemory{ LONG ref; LPBYTE memory;} BufferMemory;HRESULT WINAPI IDirectSoundImpl_Create( LPDIRECTSOUND8 * ppds);HRESULT WINAPI DSOUND_Create( LPDIRECTSOUND *ppDS, IUnknown *pUnkOuter);HRESULT WINAPI DSOUND_Create8( LPDIRECTSOUND8 *ppDS, IUnknown *pUnkOuter);/***************************************************************************** * IDirectSound COM components */struct IDirectSound_IUnknown { const IUnknownVtbl *lpVtbl; LONG ref; LPDIRECTSOUND8 pds;};HRESULT WINAPI IDirectSound_IUnknown_Create( LPDIRECTSOUND8 pds, LPUNKNOWN * ppunk);struct IDirectSound_IDirectSound { const IDirectSoundVtbl *lpVtbl; LONG ref; LPDIRECTSOUND8 pds;};HRESULT WINAPI IDirectSound_IDirectSound_Create( LPDIRECTSOUND8 pds, LPDIRECTSOUND * ppds);/***************************************************************************** * IDirectSound8 COM components */struct IDirectSound8_IUnknown { const IUnknownVtbl *lpVtbl; LONG ref; LPDIRECTSOUND8 pds;};HRESULT WINAPI IDirectSound8_IUnknown_Create( LPDIRECTSOUND8 pds, LPUNKNOWN * ppunk);struct IDirectSound8_IDirectSound { const IDirectSoundVtbl *lpVtbl; LONG ref; LPDIRECTSOUND8 pds;};HRESULT WINAPI IDirectSound8_IDirectSound_Create( LPDIRECTSOUND8 pds, LPDIRECTSOUND * ppds);struct IDirectSound8_IDirectSound8 { const IDirectSound8Vtbl *lpVtbl; LONG ref; LPDIRECTSOUND8 pds;};HRESULT WINAPI IDirectSound8_IDirectSound8_Create( LPDIRECTSOUND8 pds, LPDIRECTSOUND8 * ppds);/***************************************************************************** * IDirectSoundBuffer implementation structure */struct IDirectSoundBufferImpl{ /* FIXME: document */ /* IUnknown fields */ const IDirectSoundBuffer8Vtbl *lpVtbl; LONG ref; /* IDirectSoundBufferImpl fields */ SecondaryBufferImpl* dsb; IDirectSoundImpl* dsound; CRITICAL_SECTION lock; PIDSDRIVERBUFFER hwbuf; PWAVEFORMATEX pwfx; BufferMemory* buffer; DWORD playflags,state,leadin; DWORD playpos,startpos,writelead,buflen; DWORD nAvgBytesPerSec; DWORD freq; DSVOLUMEPAN volpan, cvolpan; DSBUFFERDESC dsbd; /* used for frequency conversion (PerfectPitch) */ ULONG freqAdjust, freqAcc; /* used for intelligent (well, sort of) prebuffering */ DWORD probably_valid_to, last_playpos; DWORD primary_mixpos, buf_mixpos; BOOL need_remix; /* IDirectSoundNotifyImpl fields */ IDirectSoundNotifyImpl* notify; LPDSBPOSITIONNOTIFY notifies; int nrofnotifies; PIDSDRIVERNOTIFY hwnotify; /* DirectSound3DBuffer fields */ IDirectSound3DBufferImpl* ds3db; DS3DBUFFER ds3db_ds3db; LONG ds3db_lVolume; BOOL ds3db_need_recalc; /* IKsPropertySet fields */ IKsBufferPropertySetImpl* iks;};HRESULT WINAPI IDirectSoundBufferImpl_Create( IDirectSoundImpl *ds, IDirectSoundBufferImpl **pdsb, LPCDSBUFFERDESC dsbd);HRESULT WINAPI IDirectSoundBufferImpl_Destroy( IDirectSoundBufferImpl *pdsb);/***************************************************************************** * SecondaryBuffer implementation structure */struct SecondaryBufferImpl{ const IDirectSoundBuffer8Vtbl *lpVtbl; LONG ref; IDirectSoundBufferImpl* dsb;};HRESULT WINAPI SecondaryBufferImpl_Create( IDirectSoundBufferImpl *dsb, SecondaryBufferImpl **pdsb);HRESULT WINAPI SecondaryBufferImpl_Destroy( SecondaryBufferImpl *pdsb);/***************************************************************************** * PrimaryBuffer implementation structure */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?