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 + -
显示快捷键?