Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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-cw
Commits
73654470
Commit
73654470
authored
Oct 19, 2023
by
Alex Henrie
Committed by
Alexandre Julliard
Nov 09, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "dsound: Get rid of the global device GUID arrays.".
This reverts commit
e1f0318e
. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=55608
parent
ed7aca01
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
33 additions
and
16 deletions
+33
-16
dsound_main.c
dlls/dsound/dsound_main.c
+20
-11
dsound_private.h
dlls/dsound/dsound_private.h
+5
-1
propset.c
dlls/dsound/propset.c
+8
-4
No files found.
dlls/dsound/dsound_main.c
View file @
73654470
...
@@ -73,6 +73,9 @@ static CRITICAL_SECTION_DEBUG DSOUND_renderers_lock_debug =
...
@@ -73,6 +73,9 @@ static CRITICAL_SECTION_DEBUG DSOUND_renderers_lock_debug =
};
};
CRITICAL_SECTION
DSOUND_renderers_lock
=
{
&
DSOUND_renderers_lock_debug
,
-
1
,
0
,
0
,
0
,
0
};
CRITICAL_SECTION
DSOUND_renderers_lock
=
{
&
DSOUND_renderers_lock_debug
,
-
1
,
0
,
0
,
0
,
0
};
GUID
DSOUND_renderer_guids
[
MAXWAVEDRIVERS
];
GUID
DSOUND_capture_guids
[
MAXWAVEDRIVERS
];
const
WCHAR
wine_vxd_drv
[]
=
L"winemm.vxd"
;
const
WCHAR
wine_vxd_drv
[]
=
L"winemm.vxd"
;
/* All default settings, you most likely don't want to touch these, see wiki on UsefulRegistryKeys */
/* All default settings, you most likely don't want to touch these, see wiki on UsefulRegistryKeys */
...
@@ -385,13 +388,13 @@ HRESULT get_mmdevice(EDataFlow flow, const GUID *tgt, IMMDevice **device)
...
@@ -385,13 +388,13 @@ HRESULT get_mmdevice(EDataFlow flow, const GUID *tgt, IMMDevice **device)
return
DSERR_INVALIDPARAM
;
return
DSERR_INVALIDPARAM
;
}
}
static
BOOL
send_device
(
IMMDevice
*
device
,
LPDSENUMCALLBACKW
cb
,
void
*
user
)
static
BOOL
send_device
(
IMMDevice
*
device
,
GUID
*
guid
,
LPDSENUMCALLBACKW
cb
,
void
*
user
)
{
{
IPropertyStore
*
ps
;
IPropertyStore
*
ps
;
PROPVARIANT
pv
;
PROPVARIANT
pv
;
BOOL
keep_going
;
BOOL
keep_going
;
HRESULT
hr
;
HRESULT
hr
;
GUID
guid
;
PropVariantInit
(
&
pv
);
PropVariantInit
(
&
pv
);
...
@@ -401,7 +404,7 @@ static BOOL send_device(IMMDevice *device, LPDSENUMCALLBACKW cb, void *user)
...
@@ -401,7 +404,7 @@ static BOOL send_device(IMMDevice *device, LPDSENUMCALLBACKW cb, void *user)
return
TRUE
;
return
TRUE
;
}
}
hr
=
get_mmdevice_guid
(
device
,
ps
,
&
guid
);
hr
=
get_mmdevice_guid
(
device
,
ps
,
guid
);
if
(
FAILED
(
hr
)){
if
(
FAILED
(
hr
)){
IPropertyStore_Release
(
ps
);
IPropertyStore_Release
(
ps
);
return
TRUE
;
return
TRUE
;
...
@@ -415,10 +418,10 @@ static BOOL send_device(IMMDevice *device, LPDSENUMCALLBACKW cb, void *user)
...
@@ -415,10 +418,10 @@ static BOOL send_device(IMMDevice *device, LPDSENUMCALLBACKW cb, void *user)
return
TRUE
;
return
TRUE
;
}
}
TRACE
(
"Calling back with %s (%s)
\n
"
,
wine_dbgstr_guid
(
&
guid
),
TRACE
(
"Calling back with %s (%s)
\n
"
,
wine_dbgstr_guid
(
guid
),
wine_dbgstr_w
(
pv
.
pwszVal
));
wine_dbgstr_w
(
pv
.
pwszVal
));
keep_going
=
cb
(
&
guid
,
pv
.
pwszVal
,
wine_vxd_drv
,
user
);
keep_going
=
cb
(
guid
,
pv
.
pwszVal
,
wine_vxd_drv
,
user
);
PropVariantClear
(
&
pv
);
PropVariantClear
(
&
pv
);
IPropertyStore_Release
(
ps
);
IPropertyStore_Release
(
ps
);
...
@@ -428,12 +431,13 @@ static BOOL send_device(IMMDevice *device, LPDSENUMCALLBACKW cb, void *user)
...
@@ -428,12 +431,13 @@ static BOOL send_device(IMMDevice *device, LPDSENUMCALLBACKW cb, void *user)
/* S_FALSE means the callback returned FALSE at some point
/* S_FALSE means the callback returned FALSE at some point
* S_OK means the callback always returned TRUE */
* S_OK means the callback always returned TRUE */
HRESULT
enumerate_mmdevices
(
EDataFlow
flow
,
LPDSENUMCALLBACKW
cb
,
void
*
user
)
HRESULT
enumerate_mmdevices
(
EDataFlow
flow
,
GUID
*
guids
,
LPDSENUMCALLBACKW
cb
,
void
*
user
)
{
{
IMMDeviceEnumerator
*
devenum
;
IMMDeviceEnumerator
*
devenum
;
IMMDeviceCollection
*
coll
;
IMMDeviceCollection
*
coll
;
IMMDevice
*
defdev
=
NULL
;
IMMDevice
*
defdev
=
NULL
;
UINT
count
,
i
;
UINT
count
,
i
,
n
;
BOOL
keep_going
;
BOOL
keep_going
;
HRESULT
hr
,
init_hr
;
HRESULT
hr
,
init_hr
;
...
@@ -472,8 +476,10 @@ HRESULT enumerate_mmdevices(EDataFlow flow, LPDSENUMCALLBACKW cb, void *user)
...
@@ -472,8 +476,10 @@ HRESULT enumerate_mmdevices(EDataFlow flow, LPDSENUMCALLBACKW cb, void *user)
eMultimedia
,
&
defdev
);
eMultimedia
,
&
defdev
);
if
(
FAILED
(
hr
)){
if
(
FAILED
(
hr
)){
defdev
=
NULL
;
defdev
=
NULL
;
n
=
0
;
}
else
{
}
else
{
keep_going
=
send_device
(
defdev
,
cb
,
user
);
keep_going
=
send_device
(
defdev
,
&
guids
[
0
],
cb
,
user
);
n
=
1
;
}
}
}
}
...
@@ -487,7 +493,8 @@ HRESULT enumerate_mmdevices(EDataFlow flow, LPDSENUMCALLBACKW cb, void *user)
...
@@ -487,7 +493,8 @@ HRESULT enumerate_mmdevices(EDataFlow flow, LPDSENUMCALLBACKW cb, void *user)
}
}
if
(
device
!=
defdev
){
if
(
device
!=
defdev
){
keep_going
=
send_device
(
device
,
cb
,
user
);
keep_going
=
send_device
(
device
,
&
guids
[
n
],
cb
,
user
);
++
n
;
}
}
IMMDevice_Release
(
device
);
IMMDevice_Release
(
device
);
...
@@ -530,7 +537,8 @@ HRESULT WINAPI DirectSoundEnumerateW(
...
@@ -530,7 +537,8 @@ HRESULT WINAPI DirectSoundEnumerateW(
setup_dsound_options
();
setup_dsound_options
();
hr
=
enumerate_mmdevices
(
eRender
,
lpDSEnumCallback
,
lpContext
);
hr
=
enumerate_mmdevices
(
eRender
,
DSOUND_renderer_guids
,
lpDSEnumCallback
,
lpContext
);
return
SUCCEEDED
(
hr
)
?
DS_OK
:
hr
;
return
SUCCEEDED
(
hr
)
?
DS_OK
:
hr
;
}
}
...
@@ -593,7 +601,8 @@ DirectSoundCaptureEnumerateW(
...
@@ -593,7 +601,8 @@ DirectSoundCaptureEnumerateW(
setup_dsound_options
();
setup_dsound_options
();
hr
=
enumerate_mmdevices
(
eCapture
,
lpDSEnumCallback
,
lpContext
);
hr
=
enumerate_mmdevices
(
eCapture
,
DSOUND_capture_guids
,
lpDSEnumCallback
,
lpContext
);
return
SUCCEEDED
(
hr
)
?
DS_OK
:
hr
;
return
SUCCEEDED
(
hr
)
?
DS_OK
:
hr
;
}
}
...
...
dlls/dsound/dsound_private.h
View file @
73654470
...
@@ -255,6 +255,9 @@ HRESULT IDirectSoundCaptureImpl_Create(IUnknown *outer_unk, REFIID riid, void **
...
@@ -255,6 +255,9 @@ HRESULT IDirectSoundCaptureImpl_Create(IUnknown *outer_unk, REFIID riid, void **
extern
CRITICAL_SECTION
DSOUND_renderers_lock
;
extern
CRITICAL_SECTION
DSOUND_renderers_lock
;
extern
struct
list
DSOUND_renderers
;
extern
struct
list
DSOUND_renderers
;
extern
GUID
DSOUND_renderer_guids
[
MAXWAVEDRIVERS
];
extern
GUID
DSOUND_capture_guids
[
MAXWAVEDRIVERS
];
extern
const
WCHAR
wine_vxd_drv
[];
extern
const
WCHAR
wine_vxd_drv
[];
void
setup_dsound_options
(
void
);
void
setup_dsound_options
(
void
);
...
@@ -263,4 +266,5 @@ HRESULT get_mmdevice(EDataFlow flow, const GUID *tgt, IMMDevice **device);
...
@@ -263,4 +266,5 @@ HRESULT get_mmdevice(EDataFlow flow, const GUID *tgt, IMMDevice **device);
BOOL
DSOUND_check_supported
(
IAudioClient
*
client
,
DWORD
rate
,
BOOL
DSOUND_check_supported
(
IAudioClient
*
client
,
DWORD
rate
,
DWORD
depth
,
WORD
channels
);
DWORD
depth
,
WORD
channels
);
HRESULT
enumerate_mmdevices
(
EDataFlow
flow
,
LPDSENUMCALLBACKW
cb
,
void
*
user
);
HRESULT
enumerate_mmdevices
(
EDataFlow
flow
,
GUID
*
guids
,
LPDSENUMCALLBACKW
cb
,
void
*
user
);
dlls/dsound/propset.c
View file @
73654470
...
@@ -134,9 +134,11 @@ static HRESULT DSPROPERTY_WaveDeviceMappingW(
...
@@ -134,9 +134,11 @@ static HRESULT DSPROPERTY_WaveDeviceMappingW(
search
.
found_guid
=
&
ppd
->
DeviceId
;
search
.
found_guid
=
&
ppd
->
DeviceId
;
if
(
ppd
->
DataFlow
==
DIRECTSOUNDDEVICE_DATAFLOW_RENDER
)
if
(
ppd
->
DataFlow
==
DIRECTSOUNDDEVICE_DATAFLOW_RENDER
)
hr
=
enumerate_mmdevices
(
eRender
,
search_callback
,
&
search
);
hr
=
enumerate_mmdevices
(
eRender
,
DSOUND_renderer_guids
,
search_callback
,
&
search
);
else
if
(
ppd
->
DataFlow
==
DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE
)
else
if
(
ppd
->
DataFlow
==
DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE
)
hr
=
enumerate_mmdevices
(
eCapture
,
search_callback
,
&
search
);
hr
=
enumerate_mmdevices
(
eCapture
,
DSOUND_capture_guids
,
search_callback
,
&
search
);
else
else
return
DSERR_INVALIDPARAM
;
return
DSERR_INVALIDPARAM
;
...
@@ -314,10 +316,12 @@ static HRESULT DSPROPERTY_EnumerateW(
...
@@ -314,10 +316,12 @@ static HRESULT DSPROPERTY_EnumerateW(
return
E_PROP_ID_UNSUPPORTED
;
return
E_PROP_ID_UNSUPPORTED
;
}
}
hr
=
enumerate_mmdevices
(
eRender
,
enum_callback
,
ppd
);
hr
=
enumerate_mmdevices
(
eRender
,
DSOUND_renderer_guids
,
enum_callback
,
ppd
);
if
(
hr
==
S_OK
)
if
(
hr
==
S_OK
)
hr
=
enumerate_mmdevices
(
eCapture
,
enum_callback
,
ppd
);
hr
=
enumerate_mmdevices
(
eCapture
,
DSOUND_capture_guids
,
enum_callback
,
ppd
);
return
SUCCEEDED
(
hr
)
?
DS_OK
:
hr
;
return
SUCCEEDED
(
hr
)
?
DS_OK
:
hr
;
}
}
...
...
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