Rémi Bernon (@rbernon) commented about dlls/windows.media.playback.backgroundmediaplayer/main.c:
{
- FIXME( "iface %p, player %p stub!\n", iface, player );
 - return E_NOTIMPL;
 
- struct background_media_player_statics *impl = impl_from_IBackgroundMediaPlayerStatics( iface );
 - HRESULT hr;
 - TRACE( "iface %p, player %p\n", iface, player );
 - if (!impl->media_player && FAILED(hr = get_media_player( &impl->media_player )))
 - {
 *player = NULL;return hr;- }
 - *player = impl->media_player;
 - IMediaPlayer_AddRef( *player );
 
I suspect this will need to be guarded with a critical section as multiple threads could be calling get_Current concurrently. The same would then be needed for the release, in case some thread is releasing the last factory reference while another just acquired a new reference and called get_Current.
I would say that this is maybe a bit unnecessarily complicated for a stub. For simplicity you could allocate a new IMediaPlayer stub each time get_Current is called, and keep the media_player == media_player2 test as todo_wine.