static void GCC_FMT_ATTR (2, 3) dsound_logerr ( HRESULT hr, const char *fmt, ... ) { va_list ap; va_start (ap, fmt); AUD_vlog (AUDIO_CAP, fmt, ap); va_end (ap); dsound_log_hresult (hr); }
static void GCC_FMT_ATTR (3, 4) dsound_logerr2 ( HRESULT hr, const char *typ, const char *fmt, ... ) { va_list ap; AUD_log (AUDIO_CAP, "Could not initialize %s\n", typ); va_start (ap, fmt); AUD_vlog (AUDIO_CAP, fmt, ap); va_end (ap); dsound_log_hresult (hr); }
static int dsound_open (dsound *s) { int err; HRESULT hr; WAVEFORMATEX wfx; DSBUFFERDESC dsbd; HWND hwnd; hwnd = GetForegroundWindow (); hr = IDirectSound_SetCooperativeLevel ( s->dsound, hwnd, DSSCL_PRIORITY ); if (FAILED (hr)) { #ifndef VBOX dsound_logerr (hr, "Could not set cooperative level for window %p\n", hwnd); #else LogRel(("DSound: Could not set cooperative level for window %p\n", hwnd)); dsound_log_hresult(hr); #endif return -1; } if (!conf.set_primary) { return 0; } err = waveformat_from_audio_settings (&wfx, &conf.settings); if (err) { return -1; } memset (&dsbd, 0, sizeof (dsbd)); dsbd.dwSize = sizeof (dsbd); dsbd.dwFlags = DSBCAPS_PRIMARYBUFFER; dsbd.dwBufferBytes = 0; dsbd.lpwfxFormat = NULL; hr = IDirectSound_CreateSoundBuffer ( s->dsound, &dsbd, &s->dsound_primary_buffer, NULL ); if (FAILED (hr)) { #ifndef VBOX dsound_logerr (hr, "Could not create primary playback buffer\n"); #else LogRel(("DSound: Could not create primary playback buffer\n")); dsound_log_hresult(hr); #endif return -1; } hr = IDirectSoundBuffer_SetFormat (s->dsound_primary_buffer, &wfx); if (FAILED (hr)) { #ifndef VBOX dsound_logerr (hr, "Could not set primary playback buffer format\n"); #else LogRel(("DSound: Could not set primary playback buffer format\n")); dsound_log_hresult(hr); #endif } hr = IDirectSoundBuffer_GetFormat ( s->dsound_primary_buffer, &wfx, sizeof (wfx), NULL ); if (FAILED (hr)) { #ifndef VBOX dsound_logerr (hr, "Could not get primary playback buffer format\n"); #else LogRel(("DSound: Could not get primary playback buffer format\n")); dsound_log_hresult(hr); #endif goto fail0; } #ifdef DEBUG_DSOUND dolog ("Primary\n"); print_wave_format (&wfx); #endif err = waveformat_to_audio_settings (&wfx, &s->settings); if (err) { goto fail0; } return 0; fail0: dsound_close (s); return -1; }