Changeset 3099 for trunk/src/dsound/OS2DSOUND.CPP
- Timestamp:
- Mar 13, 2000, 1:47:54 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/dsound/OS2DSOUND.CPP
r1744 r3099 1 /* $Id: OS2DSOUND.CPP,v 1. 5 1999-11-14 22:12:15 hughExp $ */1 /* $Id: OS2DSOUND.CPP,v 1.6 2000-03-13 12:47:46 sandervl Exp $ */ 2 2 3 3 /* 4 4 * DirectSound main class 5 5 * 6 * Copyright 1998 Sander van Leeuwen (sandervl@xs4all.nl) 6 * Copyright 1998 Sander van Leeuwen 7 * Copyright 2000 Michal Necasek 7 8 * 8 9 * Project Odin Software License can be found in LICENSE.TXT … … 20 21 #include <dsound.h> 21 22 22 #include "os2dsound.h" 23 #include "os2sndbuffer.h" 23 #include "OS2DSound.h" 24 #include "OS2SndBuffer.h" 25 #include "OS2PrimBuff.h" 26 #include "OS23DListener.h" 27 #include "OS2Notify.h" 24 28 #include <misc.h> 29 30 // TODO: primary buffer should probably created right away when creating the DSound 31 // object 32 // TODO: handle cooperative levels properly!! 33 34 // this flag is set if the OS2IDirectObject exists 35 BOOL OS2IDirectSound::fDSExists = FALSE; 25 36 26 37 //****************************************************************************** … … 29 40 lastError(DS_OK), hwndClient(0) 30 41 { 31 lpVtbl = &Vtbl; 32 Vtbl.AddRef = SoundAddRef; 33 Vtbl.Release = SoundRelease; 34 Vtbl.QueryInterface = SoundQueryInterface; 35 Vtbl.Compact = SoundCompact; 36 Vtbl.CreateSoundBuffer = SoundCreateSoundBuffer; 37 Vtbl.GetCaps = SoundGetCaps; 38 Vtbl.DuplicateSoundBuffer = SoundDuplicateSoundBuffer; 39 Vtbl.SetCooperativeLevel = SoundSetCooperativeLevel; 40 Vtbl.Compact = SoundCompact; 41 Vtbl.GetSpeakerConfig = SoundGetSpeakerConfig; 42 Vtbl.SetSpeakerConfig = SoundSetSpeakerConfig; 43 Vtbl.Initialize = SoundInitialize; 44 45 speakerConfig = DSSPEAKER_STEREO; 46 CoopLevel = DSSCL_EXCLUSIVE; //default 42 lpVtbl = &Vtbl; 43 Vtbl.AddRef = SoundAddRef; 44 Vtbl.Release = SoundRelease; 45 Vtbl.QueryInterface = SoundQueryInterface; 46 Vtbl.Compact = SoundCompact; 47 Vtbl.CreateSoundBuffer = SoundCreateSoundBuffer; 48 Vtbl.GetCaps = SoundGetCaps; 49 Vtbl.DuplicateSoundBuffer = SoundDuplicateSoundBuffer; 50 Vtbl.SetCooperativeLevel = SoundSetCooperativeLevel; 51 Vtbl.Compact = SoundCompact; 52 Vtbl.GetSpeakerConfig = SoundGetSpeakerConfig; 53 Vtbl.SetSpeakerConfig = SoundSetSpeakerConfig; 54 Vtbl.Initialize = SoundInitialize; 55 56 dprintf(("DSOUND-OS2IDirectSound::OS2IDirectSound\n")); 57 58 speakerConfig = DSSPEAKER_STEREO; 59 CoopLevel = DSSCL_EXCLUSIVE; //default 60 61 OS2IDirectSound::fDSExists = TRUE; 62 63 dprintf(("Sound init OK\n")); 47 64 } 48 65 //****************************************************************************** … … 50 67 OS2IDirectSound::~OS2IDirectSound() 51 68 { 52 69 // TODO: Close all SoundBuffers here 70 OS2IDirectSoundBuffer::DestroyAllBuffers(); 71 OS2IDirectSound::fDSExists = FALSE; 53 72 } 54 73 //****************************************************************************** … … 56 75 HRESULT WIN32API SoundQueryInterface(THIS, REFIID riid, LPVOID * ppvObj) 57 76 { 58 dprintf(("OS2IDirectSound::QueryInterface\n"));59 if(This == NULL)60 {61 return DSERR_INVALIDPARAM;62 }63 *ppvObj = NULL; 64 65 if(!IsEqualGUID(riid, CLSID_DirectSound) &&66 !IsEqualGUID(riid, IID_IDirectSound))67 return E_NOINTERFACE; 68 69 *ppvObj = This; 70 71 SoundAddRef(This);72 return(DS_OK); 73 } 77 dprintf(("DSOUND-OS2IDirectSound::QueryInterface\n")); 78 if (This == NULL) { 79 return DSERR_INVALIDPARAM; 80 } 81 *ppvObj = NULL; 82 83 if (!IsEqualGUID(riid, CLSID_DirectSound) && 84 !IsEqualGUID(riid, IID_IDirectSound)) 85 return E_NOINTERFACE; 86 87 *ppvObj = This; 88 89 SoundAddRef(This); 90 return DS_OK; 91 } 92 74 93 //****************************************************************************** 75 94 //****************************************************************************** 76 95 ULONG WIN32API SoundAddRef(THIS) 77 96 { 78 OS2IDirectSound *me = (OS2IDirectSound *)This; 79 80 dprintf(("OS2IDirectSound::AddRef %d\n", me->Referenced+1)); 81 return ++me->Referenced; 82 } 97 OS2IDirectSound *me = (OS2IDirectSound *)This; 98 99 dprintf(("DSOUND-OS2IDirectSound::AddRef %d\n", me->Referenced+1)); 100 return ++me->Referenced; 101 } 102 83 103 //****************************************************************************** 84 104 //****************************************************************************** 85 105 ULONG WIN32API SoundRelease(THIS) 86 106 { 87 OS2IDirectSound *me = (OS2IDirectSound *)This; 88 89 dprintf(("OS2IDirectSound::Release %d\n", me->Referenced-1)); 90 if(me->Referenced) { 91 me->Referenced--; 92 if(me->Referenced == 0) { 93 delete me; 94 return(0); 95 } 96 else return me->Referenced; 97 } 98 else return(0); 99 } 107 OS2IDirectSound *me = (OS2IDirectSound *)This; 108 109 dprintf(("DSOUND-OS2IDirectSound::Release %d\n", me->Referenced-1)); 110 if (me->Referenced) { 111 me->Referenced--; 112 if (me->Referenced == 0) { 113 delete me; 114 return 0; 115 } 116 else 117 return me->Referenced; 118 } 119 else 120 return 0; 121 } 122 100 123 //****************************************************************************** 101 124 //****************************************************************************** 102 125 HRESULT WIN32API SoundCompact(THIS) 103 126 { 104 dprintf(("OS2IDirectSound::Compact\n")); 105 return(DS_OK); 106 } 127 dprintf(("DSOUND-OS2IDirectSound::Compact\n")); 128 return DS_OK; 129 } 130 107 131 //****************************************************************************** 108 132 //****************************************************************************** … … 112 136 LPUNKNOWN pUnkOuter) 113 137 { 114 OS2IDirectSound *me = (OS2IDirectSound *)This; 115 OS2IDirectSoundBuffer *sndbuf; 116 117 dprintf(("OS2IDirectSound::CreateSoundBuffer\n")); 118 if(me == NULL || lpDSBufferDesc == NULL || lplpDirectSoundBuffer == NULL) 119 { 120 return(DSERR_INVALIDPARAM); 121 } 122 123 sndbuf = new OS2IDirectSoundBuffer(lpDSBufferDesc); 124 if(sndbuf == NULL) 125 { 126 return(DSERR_OUTOFMEMORY); 127 } 128 if(sndbuf->GetLastError() != DS_OK) 129 { 130 ULONG lastErr = sndbuf->GetLastError(); 131 delete sndbuf; 132 return lastErr; 133 } 134 *lplpDirectSoundBuffer = (LPDIRECTSOUNDBUFFER)sndbuf; 135 return(DS_OK); 136 } 138 OS2IDirectSound *me = (OS2IDirectSound *)This; 139 OS2IDirectSoundBuffer *sndbuf; 140 141 dprintf(("DSOUND-OS2IDirectSound::CreateSoundBuffer\n")); 142 if (me == NULL || lpDSBufferDesc == NULL || lplpDirectSoundBuffer == NULL) { 143 return DSERR_INVALIDPARAM; 144 } 145 146 if ((lpDSBufferDesc->dwFlags & DSBCAPS_PRIMARYBUFFER) && (lpDSBufferDesc->lpwfxFormat != NULL)) { 147 // Primary buffers must be created without format info! 148 return DSERR_INVALIDPARAM; 149 } 150 151 if (lpDSBufferDesc->dwFlags & DSBCAPS_PRIMARYBUFFER) { 152 OS2PrimBuff *primbuff; 153 primbuff = new OS2PrimBuff(me, lpDSBufferDesc); 154 155 if (primbuff == NULL) 156 return DSERR_OUTOFMEMORY; 157 158 if ( primbuff->GetLastError() != DS_OK ){ 159 ULONG lastErr = primbuff->GetLastError(); 160 161 dprintf(("LastErr = %d\n", lastErr)); 162 delete primbuff; 163 return lastErr; 164 } 165 *lplpDirectSoundBuffer = (LPDIRECTSOUNDBUFFER)primbuff; 166 primbuff->Vtbl.AddRef(primbuff); 167 dprintf(("Created PrimBuff... Exiting Create Buffer function\n")); 168 169 return DS_OK; 170 } 171 172 sndbuf = new OS2IDirectSoundBuffer(me, lpDSBufferDesc); 173 if (sndbuf == NULL) { 174 return DSERR_OUTOFMEMORY; 175 } 176 if(sndbuf->GetLastError() != DS_OK) { 177 ULONG lastErr = sndbuf->GetLastError(); 178 delete sndbuf; 179 return lastErr; 180 } 181 sndbuf->Vtbl.AddRef(sndbuf); 182 183 *lplpDirectSoundBuffer = (LPDIRECTSOUNDBUFFER)sndbuf; 184 185 return DS_OK; 186 } 187 137 188 //****************************************************************************** 138 189 //****************************************************************************** 139 190 HRESULT WIN32API SoundGetCaps(THIS_ LPDSCAPS lpCaps) 140 191 { 141 dprintf(("OS2IDirectSound::GetCaps\n")); 142 return(DS_OK); 143 } 192 dprintf(("DSOUND-OS2IDirectSound::GetCaps\n")); 193 194 if (lpCaps == NULL) 195 return DSERR_INVALIDPARAM; 196 197 lpCaps->dwSize = sizeof(DSCAPS); 198 lpCaps->dwFlags = DSCAPS_SECONDARY8BIT | DSCAPS_SECONDARY16BIT | 199 DSCAPS_SECONDARYMONO | DSCAPS_SECONDARYSTEREO | 200 DSCAPS_PRIMARY8BIT | DSCAPS_PRIMARY16BIT | 201 /* DSCAPS_PRIMARYMONO |*/ DSCAPS_PRIMARYSTEREO; 202 lpCaps->dwMinSecondarySampleRate = 100; 203 lpCaps->dwMaxSecondarySampleRate = 100000; 204 lpCaps->dwPrimaryBuffers = 1; 205 lpCaps->dwMaxHwMixingAllBuffers = 0; // no HW support, no HW buffers... 206 lpCaps->dwMaxHwMixingStaticBuffers = 0; 207 lpCaps->dwMaxHwMixingStreamingBuffers = 0; 208 lpCaps->dwFreeHwMixingAllBuffers = 0; 209 lpCaps->dwFreeHwMixingStaticBuffers = 0; 210 lpCaps->dwFreeHwMixingStreamingBuffers = 0; 211 lpCaps->dwMaxHw3DAllBuffers = 0; 212 lpCaps->dwMaxHw3DStaticBuffers = 0; 213 lpCaps->dwMaxHw3DStreamingBuffers = 0; 214 lpCaps->dwFreeHw3DAllBuffers = 0; 215 lpCaps->dwFreeHw3DStaticBuffers = 0; 216 lpCaps->dwFreeHw3DStreamingBuffers = 0; 217 lpCaps->dwTotalHwMemBytes = 0; 218 lpCaps->dwFreeHwMemBytes = 0; 219 lpCaps->dwMaxContigFreeHwMemBytes = 0; 220 lpCaps->dwUnlockTransferRateHwBuffers = 0; // no transfer needed 221 lpCaps->dwPlayCpuOverheadSwBuffers = 0; // we lie here... 222 lpCaps->dwReserved1 = 0; 223 lpCaps->dwReserved2 = 0; 224 225 return DS_OK; 226 } 227 144 228 //****************************************************************************** 145 229 //****************************************************************************** 146 230 HRESULT WIN32API SoundDuplicateSoundBuffer(THIS_ LPDIRECTSOUNDBUFFER, LPLPDIRECTSOUNDBUFFER ) 147 231 { 148 dprintf(("OS2IDirectSound::DuplicateSoundBuffer\n")); 149 return(DSERR_OUTOFMEMORY); 150 } 232 dprintf(("DSOUND-OS2IDirectSound::DuplicateSoundBuffer\n")); 233 return DSERR_OUTOFMEMORY; 234 } 235 151 236 //****************************************************************************** 152 237 //****************************************************************************** 153 238 HRESULT WIN32API SoundSetCooperativeLevel(THIS_ HWND hwndClient, DWORD level) 154 239 { 155 OS2IDirectSound *me = (OS2IDirectSound *)This;156 157 dprintf(("OS2IDirectSound::SetCooperativeLevel\n"));158 if(me == NULL) {159 return(DSERR_INVALIDPARAM);160 }161 me->hwndClient = (HWND)hwndClient;162 me->CoopLevel = level;163 return(DS_OK);240 OS2IDirectSound *me = (OS2IDirectSound *)This; 241 242 dprintf(("DSOUND-OS2IDirectSound::SetCooperativeLevel (to %d)\n", level)); 243 if (me == NULL) { 244 return DSERR_INVALIDPARAM; 245 } 246 me->hwndClient = (HWND)hwndClient; 247 me->CoopLevel = level; 248 return DS_OK; 164 249 } 165 250 //****************************************************************************** … … 167 252 HRESULT WIN32API SoundGetSpeakerConfig(THIS_ LPDWORD lpSpeakerCfg) 168 253 { 169 OS2IDirectSound *me = (OS2IDirectSound *)This; 170 171 dprintf(("OS2IDirectSound::GetSpeakerConfig\n")); 172 if(me == NULL) { 173 return(DSERR_INVALIDPARAM); 174 } 175 *lpSpeakerCfg = me->speakerConfig; 176 177 return(DS_OK); 178 } 254 OS2IDirectSound *me = (OS2IDirectSound *)This; 255 256 dprintf(("DSOUND-OS2IDirectSound::GetSpeakerConfig\n")); 257 if (me == NULL) { 258 return(DSERR_INVALIDPARAM); 259 } 260 *lpSpeakerCfg = me->speakerConfig; 261 262 return DS_OK; 263 } 264 179 265 //****************************************************************************** 180 266 //****************************************************************************** 181 267 HRESULT WIN32API SoundSetSpeakerConfig(THIS_ DWORD speakerCfg) 182 268 { 183 OS2IDirectSound *me = (OS2IDirectSound *)This; 184 185 dprintf(("OS2IDirectSound::SetSpeakerConfig %X\n", speakerCfg)); 186 if(me == NULL) { 187 return(DSERR_INVALIDPARAM); 188 } 189 me->speakerConfig = speakerCfg; 190 return(DS_OK); 191 } 269 OS2IDirectSound *me = (OS2IDirectSound *)This; 270 271 dprintf(("DSOUND-OS2IDirectSound::SetSpeakerConfig %X\n", speakerCfg)); 272 if (me == NULL) { 273 return DSERR_INVALIDPARAM; 274 } 275 me->speakerConfig = speakerCfg; 276 return DS_OK; 277 } 278 192 279 //****************************************************************************** 193 280 //****************************************************************************** 194 281 HRESULT WIN32API SoundInitialize(THIS_ LPGUID) 195 282 { 196 dprintf(("OS2IDirectSound::Initialize UNSUPPORTED\n"));197 return(DS_OK);198 } 199 //****************************************************************************** 200 //****************************************************************************** 283 dprintf(("DSOUND-OS2IDirectSound::Initialize NOP\n")); 284 return DS_OK; 285 } 286 //****************************************************************************** 287 //******************************************************************************
Note:
See TracChangeset
for help on using the changeset viewer.