Commit c8a68f2a authored by Bernhard Kölbl's avatar Bernhard Kölbl Committed by Alexandre Julliard

windows.media.speech: Allow the recognition session worker to be paused.

parent e1c4035e
......@@ -162,7 +162,7 @@ struct session
struct list result_handlers;
HANDLE worker_thread, worker_control_event;
BOOLEAN worker_running;
BOOLEAN worker_running, worker_paused;
CRITICAL_SECTION cs;
};
......@@ -362,6 +362,7 @@ static HRESULT WINAPI session_StopAsync( ISpeechContinuousRecognitionSession *if
thread = impl->worker_thread;
impl->worker_thread = INVALID_HANDLE_VALUE;
impl->worker_running = FALSE;
impl->worker_paused = FALSE;
}
else
{
......@@ -401,14 +402,44 @@ static HRESULT session_pause_async( IInspectable *invoker )
static HRESULT WINAPI session_PauseAsync( ISpeechContinuousRecognitionSession *iface, IAsyncAction **action )
{
FIXME("iface %p, action %p stub!\n", iface, action);
return async_action_create(NULL, session_pause_async, action);
struct session *impl = impl_from_ISpeechContinuousRecognitionSession(iface);
HRESULT hr = S_OK;
TRACE("iface %p, action %p.\n", iface, action);
*action = NULL;
if (FAILED(hr = async_action_create(NULL, session_pause_async, action)))
return hr;
EnterCriticalSection(&impl->cs);
if (impl->worker_running)
{
impl->worker_paused = TRUE;
}
LeaveCriticalSection(&impl->cs);
SetEvent(impl->worker_control_event);
return hr;
}
static HRESULT WINAPI session_Resume( ISpeechContinuousRecognitionSession *iface )
{
FIXME("iface %p stub!\n", iface);
return E_NOTIMPL;
struct session *impl = impl_from_ISpeechContinuousRecognitionSession(iface);
TRACE("iface %p.\n", iface);
EnterCriticalSection(&impl->cs);
if (impl->worker_running)
{
impl->worker_paused = FALSE;
}
LeaveCriticalSection(&impl->cs);
SetEvent(impl->worker_control_event);
return S_OK;
}
static HRESULT WINAPI session_add_Completed( ISpeechContinuousRecognitionSession *iface,
......
......@@ -1798,11 +1798,11 @@ static void test_Recognition(void)
IAsyncAction_Release(action2);
hr = ISpeechContinuousRecognitionSession_Resume(session);
todo_wine ok(hr == S_OK, "ISpeechContinuousRecognitionSession_Resume failed, hr %#lx.\n", hr);
ok(hr == S_OK, "ISpeechContinuousRecognitionSession_Resume failed, hr %#lx.\n", hr);
/* Resume when already resumed. */
hr = ISpeechContinuousRecognitionSession_Resume(session);
todo_wine ok(hr == S_OK, "ISpeechContinuousRecognitionSession_Resume failed, hr %#lx.\n", hr);
ok(hr == S_OK, "ISpeechContinuousRecognitionSession_Resume failed, hr %#lx.\n", hr);
recog_state = 0xdeadbeef;
hr = ISpeechRecognizer2_get_State(recognizer2, &recog_state);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment