Ignore:
Timestamp:
Mar 13, 2000, 1:47:54 PM (25 years ago)
Author:
sandervl
Message:

replaced dsound by new version

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 hugh Exp $ */
     1/* $Id: OS2DSOUND.CPP,v 1.6 2000-03-13 12:47:46 sandervl Exp $ */
    22
    33/*
    44 * DirectSound main class
    55 *
    6  * Copyright 1998 Sander van Leeuwen (sandervl@xs4all.nl)
     6 * Copyright 1998 Sander van Leeuwen
     7 * Copyright 2000 Michal Necasek
    78 *
    89 * Project Odin Software License can be found in LICENSE.TXT
     
    2021#include <dsound.h>
    2122
    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"
    2428#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
     35BOOL OS2IDirectSound::fDSExists = FALSE;
    2536
    2637//******************************************************************************
     
    2940        lastError(DS_OK), hwndClient(0)
    3041{
    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"));
    4764}
    4865//******************************************************************************
     
    5067OS2IDirectSound::~OS2IDirectSound()
    5168{
    52 
     69   // TODO: Close all SoundBuffers here
     70   OS2IDirectSoundBuffer::DestroyAllBuffers();
     71   OS2IDirectSound::fDSExists = FALSE;
    5372}
    5473//******************************************************************************
     
    5675HRESULT WIN32API SoundQueryInterface(THIS, REFIID riid, LPVOID * ppvObj)
    5776{
    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
    7493//******************************************************************************
    7594//******************************************************************************
    7695ULONG WIN32API SoundAddRef(THIS)
    7796{
    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
    83103//******************************************************************************
    84104//******************************************************************************
    85105ULONG WIN32API SoundRelease(THIS)
    86106{
    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
    100123//******************************************************************************
    101124//******************************************************************************
    102125HRESULT WIN32API SoundCompact(THIS)
    103126{
    104   dprintf(("OS2IDirectSound::Compact\n"));
    105   return(DS_OK);
    106 }
     127  dprintf(("DSOUND-OS2IDirectSound::Compact\n"));
     128  return DS_OK;
     129}
     130
    107131//******************************************************************************
    108132//******************************************************************************
     
    112136                    LPUNKNOWN pUnkOuter)
    113137{
    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
    137188//******************************************************************************
    138189//******************************************************************************
    139190HRESULT WIN32API SoundGetCaps(THIS_ LPDSCAPS lpCaps)
    140191{
    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
    144228//******************************************************************************
    145229//******************************************************************************
    146230HRESULT WIN32API SoundDuplicateSoundBuffer(THIS_ LPDIRECTSOUNDBUFFER, LPLPDIRECTSOUNDBUFFER )
    147231{
    148   dprintf(("OS2IDirectSound::DuplicateSoundBuffer\n"));
    149   return(DSERR_OUTOFMEMORY);
    150 }
     232   dprintf(("DSOUND-OS2IDirectSound::DuplicateSoundBuffer\n"));
     233   return DSERR_OUTOFMEMORY;
     234}
     235
    151236//******************************************************************************
    152237//******************************************************************************
    153238HRESULT WIN32API SoundSetCooperativeLevel(THIS_ HWND hwndClient, DWORD level)
    154239{
    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;
    164249}
    165250//******************************************************************************
     
    167252HRESULT WIN32API SoundGetSpeakerConfig(THIS_ LPDWORD lpSpeakerCfg)
    168253{
    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
    179265//******************************************************************************
    180266//******************************************************************************
    181267HRESULT WIN32API SoundSetSpeakerConfig(THIS_ DWORD speakerCfg)
    182268{
    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
    192279//******************************************************************************
    193280//******************************************************************************
    194281HRESULT WIN32API SoundInitialize(THIS_ LPGUID)
    195282{
    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.