#define BUFPTR LPDIRECTSOUNDCAPTUREBUFFER
#define FIELD dsound_capture_buffer
#define FIELD2 dsound_capture
+#define HWVOICE HWVoiceIn
+#define DSOUNDVOICE DSoundVoiceIn
#else
#define NAME "playback buffer"
#define NAME2 "DirectSound"
#define BUFPTR LPDIRECTSOUNDBUFFER
#define FIELD dsound_buffer
#define FIELD2 dsound
+#define HWVOICE HWVoiceOut
+#define DSOUNDVOICE DSoundVoiceOut
#endif
static int glue (dsound_unlock_, TYPE) (
)
{
HRESULT hr;
- LPVOID p1 = NULL, p2 = NULL;
- DWORD blen1 = 0, blen2 = 0;
DWORD flag;
#ifdef DSBTYPE_IN
#else
flag = entire ? DSBLOCK_ENTIREBUFFER : 0;
#endif
- hr = glue(IFACE, _Lock)(buf, pos, len, &p1, &blen1, &p2, &blen2, flag);
+ hr = glue(IFACE, _Lock)(buf, pos, len, p1p, blen1p, p2p, blen2p, flag);
if (FAILED (hr)) {
#ifndef DSBTYPE_IN
goto fail;
}
- if ((p1 && (blen1 & info->align)) || (p2 && (blen2 & info->align))) {
- dolog ("DirectSound returned misaligned buffer %ld %ld\n",
- blen1, blen2);
- glue (dsound_unlock_, TYPE) (buf, p1, p2, blen1, blen2);
+ if ((p1p && *p1p && (*blen1p % info->bytes_per_frame)) ||
+ (p2p && *p2p && (*blen2p % info->bytes_per_frame))) {
+ dolog("DirectSound returned misaligned buffer %ld %ld\n",
+ *blen1p, *blen2p);
+ glue(dsound_unlock_, TYPE)(buf, *p1p, p2p ? *p2p : NULL, *blen1p,
+ blen2p ? *blen2p : 0);
goto fail;
}
- if (!p1 && blen1) {
- dolog ("warning: !p1 && blen1=%ld\n", blen1);
- blen1 = 0;
+ if (p1p && !*p1p && *blen1p) {
+ dolog("warning: !p1 && blen1=%ld\n", *blen1p);
+ *blen1p = 0;
}
- if (!p2 && blen2) {
- dolog ("warning: !p2 && blen2=%ld\n", blen2);
- blen2 = 0;
+ if (p2p && !*p2p && *blen2p) {
+ dolog("warning: !p2 && blen2=%ld\n", *blen2p);
+ *blen2p = 0;
}
- *p1p = p1;
- *p2p = p2;
- *blen1p = blen1;
- *blen2p = blen2;
return 0;
fail:
*p1p = NULL - 1;
- *p2p = NULL - 1;
*blen1p = -1;
- *blen2p = -1;
+ if (p2p) {
+ *p2p = NULL - 1;
+ *blen2p = -1;
+ }
return -1;
}
goto fail0;
}
- ds->first_time = 1;
+ ds->first_time = true;
obt_as.endianness = 0;
audio_pcm_init_info (&hw->info, &obt_as);
- if (bc.dwBufferBytes & hw->info.align) {
+ if (bc.dwBufferBytes % hw->info.bytes_per_frame) {
dolog (
"GetCaps returned misaligned buffer size %ld, alignment %d\n",
- bc.dwBufferBytes, hw->info.align + 1
+ bc.dwBufferBytes, hw->info.bytes_per_frame
);
}
- hw->samples = bc.dwBufferBytes >> hw->info.shift;
+ hw->size_emul = bc.dwBufferBytes;
+ hw->samples = bc.dwBufferBytes / hw->info.bytes_per_frame;
ds->s = s;
#ifdef DEBUG_DSOUND
dolog ("caps %ld, desc %ld\n",
bc.dwBufferBytes, bd.dwBufferBytes);
-
- dolog ("bufsize %d, freq %d, chan %d, fmt %d\n",
- hw->bufsize, settings.freq, settings.nchannels, settings.fmt);
#endif
return 0;
#undef BUFPTR
#undef FIELD
#undef FIELD2
+#undef HWVOICE
+#undef DSOUNDVOICE