Since Yousician's last update, it was throwing an error when initialising audio output. Unfortunately I don't have access to the old version, but they seem to have dropped win<10 support, and are using only IAudioClient3_InitializeSharedAudioStream. They also use IDeviceTopology to get the type of the first output connector.
This is the bare minimum I needed to get it working.
--
v6: mmdevapi: add stub for IDeviceTopology
mmdevapi/tests: add test for IDeviceTopology
mmdevapi: implement IAudioClient3_InitializeSharedAudioStream
mmdevapi/tests: add test for AudioClient3_InitializeSharedAudioStream
https://gitlab.winehq.org/wine/wine/-/merge_requests/3554
On Sun Aug 20 15:35:54 2023 +0000, Zhiyi Zhang wrote:
> > Actually, did you test this with a custom source?
> No. I will look into that. Thanks.
> > depending on a the player state it's either Stop->Start->Pause or Stop->Start
> IMFMediaSession::Start() always starts the session though.
It does. What I mean is when player (I tried mfplay one) is stopped, SetPosition() does not do anything, only stores specified position. When it's playing, source is stopped and the started at new position, when it's paused source is stopped, started at new position, and then paused.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3572#note_42794
> Actually, did you test this with a custom source?
No. I will look into that. Thanks.
> depending on a the player state it's either Stop->Start->Pause or Stop->Start
IMFMediaSession::Start() always starts the session though.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3572#note_42793
This reverts commit 41cc117b3f37ab4b9b4ac8a815cd2a496d38fb4b.
This commit broke musl support.
With the changes introduced, the following code evaluates
to the #else branch without checking for SO_DEFAULT_HEADERS
resulting in an error.
server/sock.c +1888
```
\#ifdef HAS_IPX
int ipx_type = protocol - WS_NSPROTO_IPX;
\#ifdef SOL_IPX
setsockopt( sockfd, SOL_IPX, IPX_TYPE, &ipx_type, sizeof(ipx_type) );
\#else
struct ipx val;
/* Should we retrieve val using a getsockopt call and then
* set the modified one? */
val.ipx_pt = ipx_type;
setsockopt( sockfd, 0, SO_DEFAULT_HEADERS, &val, sizeof(val) );
\#endif
\#endif
```
I propose reverting the commit, but we could probably alter
the macro in the code section provided to match the changes
relevant github issue:
https://github.com/void-linux/void-packages/pull/45202
Signed-off-by: Fotios Valasiadis <fvalasiad(a)gmail.com>
--
v2: server: Check for SO_DEFAULT_HEADERS before using it.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3403
Actually, did you test this with a custom source? What I see on Windows is that Start(new_position):
* stops the source;
* flushes;
* starts again with new position.
I noticed this extra stop when I tried mfplay API to see what SetPosition() is doing - depending on a the player state it's either Stop->Start->Pause or Stop->Start. Turns out this might be what session does internally.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3572#note_42791