Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
90b71b51
Commit
90b71b51
authored
Apr 22, 2002
by
Eric Pouech
Committed by
Alexandre Julliard
Apr 22, 2002
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed multi-thread access to local variables (mainly fd for
/dev/dsp). God rid of obsolete macro. Fixed some slight init issues.
parent
ef1f0156
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
69 additions
and
63 deletions
+69
-63
audio.c
dlls/winmm/wineoss/audio.c
+53
-47
midi.c
dlls/winmm/wineoss/midi.c
+16
-10
oss.h
dlls/winmm/wineoss/oss.h
+0
-6
No files found.
dlls/winmm/wineoss/audio.c
View file @
90b71b51
...
...
@@ -199,8 +199,9 @@ static BOOL OSS_FullDuplex; /* set to non-zero if the device suppo
* open the device for both waveout and wavein streams...
* this is hackish, but it's the way OSS interface is done...
*/
static
int
OSS_OpenDevice
(
unsigned
req_access
)
static
int
OSS_OpenDevice
(
unsigned
wDevID
,
unsigned
req_access
)
{
/* wDevID: is not used yet, we handle only one global device /dev/dsp */
#ifdef USE_FULLDUPLEX
/* FIXME: race */
if
(
OSS_OpenCount
==
0
)
...
...
@@ -249,8 +250,9 @@ static int OSS_OpenDevice(unsigned req_access)
*
*
*/
static
void
OSS_CloseDevice
(
int
fd
)
static
void
OSS_CloseDevice
(
unsigned
wDevID
,
int
fd
)
{
/* wDevID: is not used yet, we handle only one global device /dev/dsp */
#ifdef USE_FULLDUPLEX
if
(
fd
!=
OSS_OpenFD
)
FIXME
(
"What the heck????
\n
"
);
if
(
--
OSS_OpenCount
==
0
)
...
...
@@ -290,7 +292,7 @@ LONG OSS_WaveInit(void)
/* FIXME: only one device is supported */
memset
(
&
WOutDev
[
0
].
caps
,
0
,
sizeof
(
WOutDev
[
0
].
caps
));
if
((
audio
=
OSS_OpenDevice
(
O_WRONLY
))
==
-
1
)
return
-
1
;
if
((
audio
=
OSS_OpenDevice
(
0
,
O_WRONLY
))
==
-
1
)
return
-
1
;
ioctl
(
audio
,
SNDCTL_DSP_RESET
,
0
);
...
...
@@ -312,17 +314,17 @@ LONG OSS_WaveInit(void)
WOutDev
[
0
].
caps
.
dwFormats
=
0x00000000
;
WOutDev
[
0
].
caps
.
dwSupport
=
WAVECAPS_VOLUME
;
IOCTL
(
audio
,
SNDCTL_DSP_GETFMTS
,
mask
);
ioctl
(
audio
,
SNDCTL_DSP_GETFMTS
,
&
mask
);
TRACE
(
"OSS dsp out mask=%08x
\n
"
,
mask
);
/* First bytespersampl, then stereo */
bytespersmpl
=
(
IOCTL
(
audio
,
SNDCTL_DSP_SAMPLESIZE
,
samplesize
)
!=
0
)
?
1
:
2
;
bytespersmpl
=
(
ioctl
(
audio
,
SNDCTL_DSP_SAMPLESIZE
,
&
samplesize
)
!=
0
)
?
1
:
2
;
WOutDev
[
0
].
caps
.
wChannels
=
(
IOCTL
(
audio
,
SNDCTL_DSP_STEREO
,
dsp_stereo
)
!=
0
)
?
1
:
2
;
WOutDev
[
0
].
caps
.
wChannels
=
(
ioctl
(
audio
,
SNDCTL_DSP_STEREO
,
&
dsp_stereo
)
!=
0
)
?
1
:
2
;
if
(
WOutDev
[
0
].
caps
.
wChannels
>
1
)
WOutDev
[
0
].
caps
.
dwSupport
|=
WAVECAPS_LRVOLUME
;
smplrate
=
44100
;
if
(
IOCTL
(
audio
,
SNDCTL_DSP_SPEED
,
smplrate
)
==
0
)
{
if
(
ioctl
(
audio
,
SNDCTL_DSP_SPEED
,
&
smplrate
)
==
0
)
{
if
(
mask
&
AFMT_U8
)
{
WOutDev
[
0
].
caps
.
dwFormats
|=
WAVE_FORMAT_4M08
;
if
(
WOutDev
[
0
].
caps
.
wChannels
>
1
)
...
...
@@ -335,7 +337,7 @@ LONG OSS_WaveInit(void)
}
}
smplrate
=
22050
;
if
(
IOCTL
(
audio
,
SNDCTL_DSP_SPEED
,
smplrate
)
==
0
)
{
if
(
ioctl
(
audio
,
SNDCTL_DSP_SPEED
,
&
smplrate
)
==
0
)
{
if
(
mask
&
AFMT_U8
)
{
WOutDev
[
0
].
caps
.
dwFormats
|=
WAVE_FORMAT_2M08
;
if
(
WOutDev
[
0
].
caps
.
wChannels
>
1
)
...
...
@@ -348,7 +350,7 @@ LONG OSS_WaveInit(void)
}
}
smplrate
=
11025
;
if
(
IOCTL
(
audio
,
SNDCTL_DSP_SPEED
,
smplrate
)
==
0
)
{
if
(
ioctl
(
audio
,
SNDCTL_DSP_SPEED
,
&
smplrate
)
==
0
)
{
if
(
mask
&
AFMT_U8
)
{
WOutDev
[
0
].
caps
.
dwFormats
|=
WAVE_FORMAT_1M08
;
if
(
WOutDev
[
0
].
caps
.
wChannels
>
1
)
...
...
@@ -360,7 +362,7 @@ LONG OSS_WaveInit(void)
WOutDev
[
0
].
caps
.
dwFormats
|=
WAVE_FORMAT_1S16
;
}
}
if
(
IOCTL
(
audio
,
SNDCTL_DSP_GETCAPS
,
caps
)
==
0
)
{
if
(
ioctl
(
audio
,
SNDCTL_DSP_GETCAPS
,
&
caps
)
==
0
)
{
TRACE
(
"OSS dsp out caps=%08X
\n
"
,
caps
);
if
((
caps
&
DSP_CAP_REALTIME
)
&&
!
(
caps
&
DSP_CAP_BATCH
))
{
WOutDev
[
0
].
caps
.
dwSupport
|=
WAVECAPS_SAMPLEACCURATE
;
...
...
@@ -370,7 +372,7 @@ LONG OSS_WaveInit(void)
!
(
caps
&
DSP_CAP_BATCH
))
WOutDev
[
0
].
caps
.
dwSupport
|=
WAVECAPS_DIRECTSOUND
;
}
OSS_CloseDevice
(
audio
);
OSS_CloseDevice
(
0
,
audio
);
TRACE
(
"out dwFormats = %08lX, dwSupport = %08lX
\n
"
,
WOutDev
[
0
].
caps
.
dwFormats
,
WOutDev
[
0
].
caps
.
dwSupport
);
...
...
@@ -385,7 +387,7 @@ LONG OSS_WaveInit(void)
memset
(
&
WInDev
[
0
].
caps
,
0
,
sizeof
(
WInDev
[
0
].
caps
));
if
((
audio
=
OSS_OpenDevice
(
O_RDONLY
))
==
-
1
)
return
-
1
;
if
((
audio
=
OSS_OpenDevice
(
0
,
O_RDONLY
))
==
-
1
)
return
-
1
;
ioctl
(
audio
,
SNDCTL_DSP_RESET
,
0
);
...
...
@@ -399,21 +401,21 @@ LONG OSS_WaveInit(void)
strcpy
(
WInDev
[
0
].
caps
.
szPname
,
"OpenSoundSystem WAVIN Driver"
);
#endif
WInDev
[
0
].
caps
.
dwFormats
=
0x00000000
;
WInDev
[
0
].
caps
.
wChannels
=
(
IOCTL
(
audio
,
SNDCTL_DSP_STEREO
,
dsp_stereo
)
!=
0
)
?
1
:
2
;
WInDev
[
0
].
caps
.
wChannels
=
(
ioctl
(
audio
,
SNDCTL_DSP_STEREO
,
&
dsp_stereo
)
!=
0
)
?
1
:
2
;
WInDev
[
0
].
bTriggerSupport
=
FALSE
;
if
(
IOCTL
(
audio
,
SNDCTL_DSP_GETCAPS
,
caps
)
==
0
)
{
if
(
ioctl
(
audio
,
SNDCTL_DSP_GETCAPS
,
&
caps
)
==
0
)
{
TRACE
(
"OSS dsp in caps=%08X
\n
"
,
caps
);
if
(
caps
&
DSP_CAP_TRIGGER
)
WInDev
[
0
].
bTriggerSupport
=
TRUE
;
}
IOCTL
(
audio
,
SNDCTL_DSP_GETFMTS
,
mask
);
ioctl
(
audio
,
SNDCTL_DSP_GETFMTS
,
&
mask
);
TRACE
(
"OSS in dsp mask=%08x
\n
"
,
mask
);
bytespersmpl
=
(
IOCTL
(
audio
,
SNDCTL_DSP_SAMPLESIZE
,
samplesize
)
!=
0
)
?
1
:
2
;
bytespersmpl
=
(
ioctl
(
audio
,
SNDCTL_DSP_SAMPLESIZE
,
&
samplesize
)
!=
0
)
?
1
:
2
;
smplrate
=
44100
;
if
(
IOCTL
(
audio
,
SNDCTL_DSP_SPEED
,
smplrate
)
==
0
)
{
if
(
ioctl
(
audio
,
SNDCTL_DSP_SPEED
,
&
smplrate
)
==
0
)
{
if
(
mask
&
AFMT_U8
)
{
WInDev
[
0
].
caps
.
dwFormats
|=
WAVE_FORMAT_4M08
;
if
(
WInDev
[
0
].
caps
.
wChannels
>
1
)
...
...
@@ -426,7 +428,7 @@ LONG OSS_WaveInit(void)
}
}
smplrate
=
22050
;
if
(
IOCTL
(
audio
,
SNDCTL_DSP_SPEED
,
smplrate
)
==
0
)
{
if
(
ioctl
(
audio
,
SNDCTL_DSP_SPEED
,
&
smplrate
)
==
0
)
{
if
(
mask
&
AFMT_U8
)
{
WInDev
[
0
].
caps
.
dwFormats
|=
WAVE_FORMAT_2M08
;
if
(
WInDev
[
0
].
caps
.
wChannels
>
1
)
...
...
@@ -439,7 +441,7 @@ LONG OSS_WaveInit(void)
}
}
smplrate
=
11025
;
if
(
IOCTL
(
audio
,
SNDCTL_DSP_SPEED
,
smplrate
)
==
0
)
{
if
(
ioctl
(
audio
,
SNDCTL_DSP_SPEED
,
&
smplrate
)
==
0
)
{
if
(
mask
&
AFMT_U8
)
{
WInDev
[
0
].
caps
.
dwFormats
|=
WAVE_FORMAT_1M08
;
if
(
WInDev
[
0
].
caps
.
wChannels
>
1
)
...
...
@@ -451,15 +453,15 @@ LONG OSS_WaveInit(void)
WInDev
[
0
].
caps
.
dwFormats
|=
WAVE_FORMAT_1S16
;
}
}
OSS_CloseDevice
(
audio
);
OSS_CloseDevice
(
0
,
audio
);
TRACE
(
"in dwFormats = %08lX
\n
"
,
WInDev
[
0
].
caps
.
dwFormats
);
#ifdef USE_FULLDUPLEX
if
((
audio
=
OSS_OpenDevice
(
O_RDWR
))
==
-
1
)
return
-
1
;
if
(
IOCTL
(
audio
,
SNDCTL_DSP_GETCAPS
,
caps
)
==
0
)
{
if
((
audio
=
OSS_OpenDevice
(
0
,
O_RDWR
))
==
-
1
)
return
-
1
;
if
(
ioctl
(
audio
,
SNDCTL_DSP_GETCAPS
,
&
caps
)
==
0
)
{
OSS_FullDuplex
=
(
caps
&
DSP_CAP_DUPLEX
);
}
OSS_CloseDevice
(
audio
);
OSS_CloseDevice
(
0
,
audio
);
#endif
return
0
;
...
...
@@ -610,7 +612,7 @@ static BOOL wodUpdatePlayedTotal(WINE_WAVEOUT* wwo, audio_buf_info* info)
if
(
!
info
)
info
=
&
dspspace
;
if
(
ioctl
(
wwo
->
unixdev
,
SNDCTL_DSP_GETOSPACE
,
info
)
<
0
)
{
ERR
(
"
IOCTL
can't 'SNDCTL_DSP_GETOSPACE' !
\n
"
);
ERR
(
"
ioctl
can't 'SNDCTL_DSP_GETOSPACE' !
\n
"
);
return
FALSE
;
}
wwo
->
dwPlayedTotal
=
wwo
->
dwWrittenTotal
-
(
wwo
->
dwBufferSize
-
info
->
bytes
);
...
...
@@ -880,7 +882,10 @@ static void wodPlayer_ProcessMessages(WINE_WAVEOUT* wwo)
SetEvent
(
ev
);
break
;
case
WINE_WM_RESTARTING
:
wwo
->
state
=
WINE_WS_PLAYING
;
if
(
wwo
->
state
==
WINE_WS_PAUSED
)
{
wwo
->
state
=
WINE_WS_PLAYING
;
}
SetEvent
(
ev
);
break
;
case
WINE_WM_HEADER
:
...
...
@@ -1069,10 +1074,12 @@ static DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
if
(
access
(
SOUND_DEV
,
0
)
!=
0
)
return
MMSYSERR_NOTENABLED
;
if
(
wwo
->
unixdev
!=
-
1
)
return
MMSYSERR_ALLOCATED
;
/* we want to be able to mmap() the device, which means it must be opened readable,
* otherwise mmap() will fail (at least under Linux) */
wwo
->
unixdev
=
OSS_OpenDevice
(((
dwFlags
&
WAVE_DIRECTSOUND
)
||
OSS_FullDuplex
)
?
O_RDWR
:
O_WRONLY
);
wwo
->
unixdev
=
OSS_OpenDevice
(
wDevID
,
((
dwFlags
&
WAVE_DIRECTSOUND
)
||
OSS_FullDuplex
)
?
O_RDWR
:
O_WRONLY
);
if
(
wwo
->
unixdev
==
-
1
)
return
MMSYSERR_ALLOCATED
;
fcntl
(
wwo
->
unixdev
,
F_SETFD
,
1
);
/* set close on exec flag */
...
...
@@ -1109,11 +1116,11 @@ static DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
dsp_stereo
=
(
wwo
->
format
.
wf
.
nChannels
>
1
)
?
1
:
0
;
format
=
(
wwo
->
format
.
wBitsPerSample
==
16
)
?
AFMT_S16_LE
:
AFMT_U8
;
IOCTL
(
wwo
->
unixdev
,
SNDCTL_DSP_SETFRAGMENT
,
audio_fragment
);
ioctl
(
wwo
->
unixdev
,
SNDCTL_DSP_SETFRAGMENT
,
&
audio_fragment
);
/* First size and stereo then samplerate */
IOCTL
(
wwo
->
unixdev
,
SNDCTL_DSP_SETFMT
,
format
);
IOCTL
(
wwo
->
unixdev
,
SNDCTL_DSP_STEREO
,
dsp_stereo
);
IOCTL
(
wwo
->
unixdev
,
SNDCTL_DSP_SPEED
,
sample_rate
);
ioctl
(
wwo
->
unixdev
,
SNDCTL_DSP_SETFMT
,
&
format
);
ioctl
(
wwo
->
unixdev
,
SNDCTL_DSP_STEREO
,
&
dsp_stereo
);
ioctl
(
wwo
->
unixdev
,
SNDCTL_DSP_SPEED
,
&
sample_rate
);
/* paranoid checks */
if
(
format
!=
((
wwo
->
format
.
wBitsPerSample
==
16
)
?
AFMT_S16_LE
:
AFMT_U8
))
...
...
@@ -1128,8 +1135,8 @@ static DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
/* Read output space info for future reference */
if
(
ioctl
(
wwo
->
unixdev
,
SNDCTL_DSP_GETOSPACE
,
&
info
)
<
0
)
{
ERR
(
"
IOCTL
can't 'SNDCTL_DSP_GETOSPACE' !
\n
"
);
OSS_CloseDevice
(
wwo
->
unixdev
);
ERR
(
"
ioctl
can't 'SNDCTL_DSP_GETOSPACE' !
\n
"
);
OSS_CloseDevice
(
w
DevID
,
w
wo
->
unixdev
);
wwo
->
unixdev
=
-
1
;
return
MMSYSERR_NOTENABLED
;
}
...
...
@@ -1204,7 +1211,7 @@ static DWORD wodClose(WORD wDevID)
OSS_DestroyRingMessage
(
&
wwo
->
msgRing
);
OSS_CloseDevice
(
wwo
->
unixdev
);
OSS_CloseDevice
(
w
DevID
,
w
wo
->
unixdev
);
wwo
->
unixdev
=
-
1
;
wwo
->
dwFragmentSize
=
0
;
ret
=
wodNotifyClient
(
wwo
,
WOM_CLOSE
,
0L
,
0L
);
...
...
@@ -1311,9 +1318,7 @@ static DWORD wodRestart(WORD wDevID)
return
MMSYSERR_BADDEVICEID
;
}
if
(
WOutDev
[
wDevID
].
state
==
WINE_WS_PAUSED
)
{
OSS_AddRingMessage
(
&
WOutDev
[
wDevID
].
msgRing
,
WINE_WM_RESTARTING
,
0
,
TRUE
);
}
OSS_AddRingMessage
(
&
WOutDev
[
wDevID
].
msgRing
,
WINE_WM_RESTARTING
,
0
,
TRUE
);
/* FIXME: is NotifyClient with WOM_DONE right ? (Comet Busters 1.3.3 needs this notification) */
/* FIXME: Myst crashes with this ... hmm -MM
...
...
@@ -1482,13 +1487,13 @@ static DWORD wodGetNumDevs(void)
{
DWORD
ret
=
1
;
/* FIXME: For now, only one sound device (SOUND_DEV) is allowed */
int
audio
=
OSS_OpenDevice
(
OSS_FullDuplex
?
O_RDWR
:
O_WRONLY
);
int
audio
=
OSS_OpenDevice
(
0
,
OSS_FullDuplex
?
O_RDWR
:
O_WRONLY
);
if
(
audio
==
-
1
)
{
if
(
errno
!=
EBUSY
)
ret
=
0
;
}
else
{
OSS_CloseDevice
(
audio
);
OSS_CloseDevice
(
0
,
audio
);
}
return
ret
;
}
...
...
@@ -2271,7 +2276,8 @@ static DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
}
wwi
=
&
WInDev
[
wDevID
];
if
((
wwi
->
unixdev
=
OSS_OpenDevice
(
OSS_FullDuplex
?
O_RDWR
:
O_RDONLY
))
==
-
1
)
if
(
wwi
->
unixdev
!=
-
1
)
return
MMSYSERR_ALLOCATED
;
if
((
wwi
->
unixdev
=
OSS_OpenDevice
(
wDevID
,
OSS_FullDuplex
?
O_RDWR
:
O_RDONLY
))
==
-
1
)
return
MMSYSERR_ALLOCATED
;
fcntl
(
wwi
->
unixdev
,
F_SETFD
,
1
);
/* set close on exec flag */
if
(
wwi
->
lpQueuePtr
)
{
...
...
@@ -2296,9 +2302,9 @@ static DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
dsp_stereo
=
(
wwi
->
format
.
wf
.
nChannels
>
1
)
?
TRUE
:
FALSE
;
format
=
(
wwi
->
format
.
wBitsPerSample
==
16
)
?
AFMT_S16_LE
:
AFMT_U8
;
IOCTL
(
wwi
->
unixdev
,
SNDCTL_DSP_SETFMT
,
format
);
IOCTL
(
wwi
->
unixdev
,
SNDCTL_DSP_STEREO
,
dsp_stereo
);
IOCTL
(
wwi
->
unixdev
,
SNDCTL_DSP_SPEED
,
sample_rate
);
ioctl
(
wwi
->
unixdev
,
SNDCTL_DSP_SETFMT
,
&
format
);
ioctl
(
wwi
->
unixdev
,
SNDCTL_DSP_STEREO
,
&
dsp_stereo
);
ioctl
(
wwi
->
unixdev
,
SNDCTL_DSP_SPEED
,
&
sample_rate
);
/* This is actually hand tuned to work so that my SB Live:
* - does not skip
...
...
@@ -2307,7 +2313,7 @@ static DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
*/
/* 7 fragments max, 2^10 = 1024 bytes per fragment */
audio_fragment
=
0x0007000A
;
IOCTL
(
wwi
->
unixdev
,
SNDCTL_DSP_SETFRAGMENT
,
audio_fragment
);
ioctl
(
wwi
->
unixdev
,
SNDCTL_DSP_SETFRAGMENT
,
&
audio_fragment
);
/* paranoid checks */
if
(
format
!=
((
wwi
->
format
.
wBitsPerSample
==
16
)
?
AFMT_S16_LE
:
AFMT_U8
))
...
...
@@ -2320,10 +2326,10 @@ static DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
ERR
(
"Can't set sample_rate to %lu (%d)
\n
"
,
wwi
->
format
.
wf
.
nSamplesPerSec
,
sample_rate
);
IOCTL
(
wwi
->
unixdev
,
SNDCTL_DSP_GETBLKSIZE
,
fragment_size
);
ioctl
(
wwi
->
unixdev
,
SNDCTL_DSP_GETBLKSIZE
,
&
fragment_size
);
if
(
fragment_size
==
-
1
)
{
WARN
(
"IOCTL can't 'SNDCTL_DSP_GETBLKSIZE' !
\n
"
);
OSS_CloseDevice
(
wwi
->
unixdev
);
OSS_CloseDevice
(
w
DevID
,
w
wi
->
unixdev
);
wwi
->
unixdev
=
-
1
;
return
MMSYSERR_NOTENABLED
;
}
...
...
@@ -2366,7 +2372,7 @@ static DWORD widClose(WORD wDevID)
}
OSS_AddRingMessage
(
&
wwi
->
msgRing
,
WINE_WM_CLOSING
,
0
,
TRUE
);
OSS_CloseDevice
(
wwi
->
unixdev
);
OSS_CloseDevice
(
w
DevID
,
w
wi
->
unixdev
);
wwi
->
unixdev
=
-
1
;
wwi
->
dwFragmentSize
=
0
;
OSS_DestroyRingMessage
(
&
wwi
->
msgRing
);
...
...
dlls/winmm/wineoss/midi.c
View file @
90b71b51
...
...
@@ -217,7 +217,8 @@ BOOL OSS_MidiInit(void)
* it's probably equal or more than wVoices
*/
tmplpCaps
->
wNotes
=
sinfo
.
nr_voices
;
tmplpCaps
->
wChannelMask
=
0xFFFF
;
/* FIXME Do we have this information?
* Assuming the soundcards can handle
* MIDICAPS_VOLUME and MIDICAPS_LRVOLUME but
...
...
@@ -231,10 +232,10 @@ BOOL OSS_MidiInit(void)
FIXME
(
"Synthesizer support MIDI in. Not supported yet (please report)
\n
"
);
}
TRACE
(
"
name='%s', techn=%d voices=%d notes=%d support=%ld
\n
"
,
tmplpCaps
->
szPname
,
tmplpCaps
->
wTechnology
,
tmplpCaps
->
wVoices
,
tmplpCaps
->
wNotes
,
tmplpCaps
->
dwSupport
);
TRACE
(
"OSS info: synth subtype=%d capa=%lx
\n
"
,
TRACE
(
"
SynthOut[%d]
\t
name='%s' techn=%d voices=%d notes=%d chnMsk=%04x support=%ld
\n
"
"
\t
OSS info: synth subtype=%d capa=%lx
\n
"
,
i
,
tmplpCaps
->
szPname
,
tmplpCaps
->
wTechnology
,
tmplpCaps
->
wVoices
,
tmplpCaps
->
wNotes
,
tmplpCaps
->
wChannelMask
,
tmplpCaps
->
dwSupport
,
sinfo
.
synth_subtype
,
(
long
)
sinfo
.
capabilities
);
}
...
...
@@ -292,12 +293,14 @@ BOOL OSS_MidiInit(void)
tmplpOutCaps
->
wVoices
=
16
;
/* Does it make any difference? */
tmplpOutCaps
->
wNotes
=
16
;
tmplpOutCaps
->
wChannelMask
=
0xFFFF
;
/* FIXME Does it make any difference? */
tmplpOutCaps
->
dwSupport
=
MIDICAPS_VOLUME
|
MIDICAPS_LRVOLUME
;
midiOutDevices
[
numsynthdevs
+
i
]
=
tmplpOutCaps
;
tmplpInCaps
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
MIDI
OUT
CAPSA
));
tmplpInCaps
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
MIDI
IN
CAPSA
));
if
(
!
tmplpInCaps
)
break
;
/* This whole part is somewhat obscure to me. I'll keep trying to dig
...
...
@@ -318,10 +321,13 @@ BOOL OSS_MidiInit(void)
midiInDevices
[
i
]
=
tmplpInCaps
;
TRACE
(
"name='%s' techn=%d voices=%d notes=%d support=%ld
\n
"
,
tmplpOutCaps
->
szPname
,
tmplpOutCaps
->
wTechnology
,
tmplpOutCaps
->
wVoices
,
tmplpOutCaps
->
wNotes
,
tmplpOutCaps
->
dwSupport
);
TRACE
(
"OSS info: midi dev-type=%d, capa=%lx
\n
"
,
TRACE
(
"MidiOut[%d]
\t
name='%s' techn=%d voices=%d notes=%d chnMsk=%04x support=%ld
\n
"
"MidiIn [%d]
\t
name='%s' support=%ld
\n
"
"
\t
OSS info: midi dev-type=%d, capa=%lx
\n
"
,
i
,
tmplpOutCaps
->
szPname
,
tmplpOutCaps
->
wTechnology
,
tmplpOutCaps
->
wVoices
,
tmplpOutCaps
->
wNotes
,
tmplpOutCaps
->
wChannelMask
,
tmplpOutCaps
->
dwSupport
,
i
,
tmplpInCaps
->
szPname
,
tmplpInCaps
->
dwSupport
,
minfo
.
dev_type
,
(
long
)
minfo
.
capabilities
);
}
...
...
dlls/winmm/wineoss/oss.h
View file @
90b71b51
...
...
@@ -33,12 +33,6 @@
#include <sys/errno.h>
#endif
#ifdef SOUND_VERSION
#define IOCTL(a,b,c) ioctl(a,b,&c)
#else
#define IOCTL(a,b,c) (c = ioctl(a,b,c))
#endif
extern
LONG
OSS_WaveInit
(
void
);
extern
BOOL
OSS_MidiInit
(
void
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment