mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-30 09:20:40 +00:00
mmdevapi: Complete IAudioClient3_InitializeSharedAudioStream.
This commit is contained in:
parent
73a501ab46
commit
9d046996cb
|
@ -117,7 +117,7 @@ static HRESULT get_periods(struct audio_client *client,
|
||||||
return params.result;
|
return params.result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT adjust_timing(struct audio_client *client,
|
static HRESULT adjust_timing(struct audio_client *client, const BOOLEAN force_def_period,
|
||||||
REFERENCE_TIME *duration, REFERENCE_TIME *period,
|
REFERENCE_TIME *duration, REFERENCE_TIME *period,
|
||||||
const AUDCLNT_SHAREMODE mode, const DWORD flags,
|
const AUDCLNT_SHAREMODE mode, const DWORD flags,
|
||||||
const WAVEFORMATEX *fmt)
|
const WAVEFORMATEX *fmt)
|
||||||
|
@ -133,7 +133,10 @@ static HRESULT adjust_timing(struct audio_client *client,
|
||||||
TRACE("Device periods: %lu default and %lu minimum\n", (ULONG)def_period, (ULONG)min_period);
|
TRACE("Device periods: %lu default and %lu minimum\n", (ULONG)def_period, (ULONG)min_period);
|
||||||
|
|
||||||
if (mode == AUDCLNT_SHAREMODE_SHARED) {
|
if (mode == AUDCLNT_SHAREMODE_SHARED) {
|
||||||
*period = def_period;
|
if (*period == 0 || force_def_period)
|
||||||
|
*period = def_period;
|
||||||
|
else if (*period < min_period)
|
||||||
|
return AUDCLNT_E_INVALID_DEVICE_PERIOD;
|
||||||
if (*duration < 3 * *period)
|
if (*duration < 3 * *period)
|
||||||
*duration = 3 * *period;
|
*duration = 3 * *period;
|
||||||
} else {
|
} else {
|
||||||
|
@ -355,7 +358,7 @@ skip:
|
||||||
return wcsdup(name);
|
return wcsdup(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT stream_init(struct audio_client *client,
|
static HRESULT stream_init(struct audio_client *client, const BOOLEAN force_def_period,
|
||||||
const AUDCLNT_SHAREMODE mode, const DWORD flags,
|
const AUDCLNT_SHAREMODE mode, const DWORD flags,
|
||||||
REFERENCE_TIME duration, REFERENCE_TIME period,
|
REFERENCE_TIME duration, REFERENCE_TIME period,
|
||||||
const WAVEFORMATEX *fmt, const GUID *sessionguid)
|
const WAVEFORMATEX *fmt, const GUID *sessionguid)
|
||||||
|
@ -387,7 +390,7 @@ static HRESULT stream_init(struct audio_client *client,
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FAILED(params.result = adjust_timing(client, &duration, &period, mode, flags, fmt)))
|
if (FAILED(params.result = adjust_timing(client, force_def_period, &duration, &period, mode, flags, fmt)))
|
||||||
return params.result;
|
return params.result;
|
||||||
|
|
||||||
sessions_lock();
|
sessions_lock();
|
||||||
|
@ -636,7 +639,7 @@ static HRESULT WINAPI client_Initialize(IAudioClient3 *iface, AUDCLNT_SHAREMODE
|
||||||
wine_dbgstr_longlong(period), fmt,
|
wine_dbgstr_longlong(period), fmt,
|
||||||
debugstr_guid(sessionguid));
|
debugstr_guid(sessionguid));
|
||||||
|
|
||||||
return stream_init(This, mode, flags, duration, period, fmt, sessionguid);
|
return stream_init(This, TRUE, mode, flags, duration, period, fmt, sessionguid);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI client_GetBufferSize(IAudioClient3 *iface, UINT32 *out)
|
static HRESULT WINAPI client_GetBufferSize(IAudioClient3 *iface, UINT32 *out)
|
||||||
|
@ -1027,14 +1030,16 @@ static HRESULT WINAPI client_InitializeSharedAudioStream(IAudioClient3 *iface, D
|
||||||
const GUID *session_guid)
|
const GUID *session_guid)
|
||||||
{
|
{
|
||||||
struct audio_client *This = impl_from_IAudioClient3(iface);
|
struct audio_client *This = impl_from_IAudioClient3(iface);
|
||||||
REFERENCE_TIME duration;
|
REFERENCE_TIME period;
|
||||||
FIXME("(%p)->(0x%lx, %u, %p, %s) - partial stub\n", This, flags, period_frames, format, debugstr_guid(session_guid));
|
|
||||||
|
TRACE("(%p)->(0x%lx, %u, %p, %s)\n", This, flags, period_frames, format, debugstr_guid(session_guid));
|
||||||
|
|
||||||
if (!format)
|
if (!format)
|
||||||
return E_POINTER;
|
return E_POINTER;
|
||||||
|
|
||||||
duration = period_frames * (REFERENCE_TIME)10000000 / format->nSamplesPerSec;
|
period = period_frames * (REFERENCE_TIME)10000000 / format->nSamplesPerSec;
|
||||||
return stream_init(This, AUDCLNT_SHAREMODE_SHARED, flags, duration, 0, format, session_guid);
|
|
||||||
|
return stream_init(This, FALSE, AUDCLNT_SHAREMODE_SHARED, flags, 0, period, format, session_guid);
|
||||||
}
|
}
|
||||||
|
|
||||||
const IAudioClient3Vtbl AudioClient3_Vtbl =
|
const IAudioClient3Vtbl AudioClient3_Vtbl =
|
||||||
|
|
Loading…
Reference in a new issue