Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
June 2022
- 68 participants
- 3274 messages
[PATCH v5 6/9] windows.media.speech/tests: Add basic tests for ssml/text to stream functions.
by Bernhard Kölbl
From: Bernhard Kölbl <besentv(a)gmail.com>
Signed-off-by: Bernhard Kölbl <besentv(a)gmail.com>
---
dlls/windows.media.speech/tests/speech.c | 129 +++++++++++++++++++++--
1 file changed, 123 insertions(+), 6 deletions(-)
diff --git a/dlls/windows.media.speech/tests/speech.c b/dlls/windows.media.speech/tests/speech.c
index d6c0c5e1988..ef43eb77317 100644
--- a/dlls/windows.media.speech/tests/speech.c
+++ b/dlls/windows.media.speech/tests/speech.c
@@ -41,6 +41,7 @@
#define AsyncStatus_Closed 4
#define SPERR_WINRT_INTERNAL_ERROR 0x800455a0
+#define SPERR_WINRT_INCORRECT_FORMAT 0x80131537
#define IHandler_RecognitionResult ITypedEventHandler_SpeechContinuousRecognitionSession_SpeechContinuousRecognitionResultGeneratedEventArgs
#define IHandler_RecognitionResultVtbl ITypedEventHandler_SpeechContinuousRecognitionSession_SpeechContinuousRecognitionResultGeneratedEventArgsVtbl
@@ -779,18 +780,27 @@ static void test_ActivationFactory(void)
static void test_SpeechSynthesizer(void)
{
+ static const WCHAR *simple_ssml =
+ L"<speak version='1.0' xmlns='http://www.w3.org/2001/10/synthesis' xml:lang='en-US'>"
+ "Hello, how are you doing today?"
+ "</speak>";
+ static const WCHAR *simple_synth_text = L"Hello, how are you doing today?";
static const WCHAR *speech_synthesizer_name = L"Windows.Media.SpeechSynthesis.SpeechSynthesizer";
static const WCHAR *speech_synthesizer_name2 = L"windows.media.speechsynthesis.speechsynthesizer";
static const WCHAR *unknown_class_name = L"Unknown.Class";
IActivationFactory *factory = NULL, *factory2 = NULL;
+ IAsyncOperation_SpeechSynthesisStream *operation_ss_stream = NULL;
+ IVectorView_IMediaMarker *media_markers = NULL;
IVectorView_VoiceInformation *voices = NULL;
IInstalledVoicesStatic *voices_static = NULL;
+ ISpeechSynthesisStream *ss_stream = NULL;
IVoiceInformation *voice;
IInspectable *inspectable = NULL, *tmp_inspectable = NULL;
IAgileObject *agile_object = NULL, *tmp_agile_object = NULL;
ISpeechSynthesizer *synthesizer;
ISpeechSynthesizer2 *synthesizer2;
IClosable *closable;
+ struct async_inspectable_handler async_inspectable_handler;
HMODULE hdll;
HSTRING str, str2;
HRESULT hr;
@@ -843,6 +853,7 @@ static void test_SpeechSynthesizer(void)
FreeLibrary(hdll);
}
+ /* Test static Synth ifaces: IActivationFactory, IInstalledVoicesStatic, etc. */
hr = IActivationFactory_QueryInterface(factory, &IID_IInspectable, (void **)&inspectable);
ok(hr == S_OK, "IActivationFactory_QueryInterface IID_IInspectable failed, hr %#lx\n", hr);
@@ -889,27 +900,135 @@ static void test_SpeechSynthesizer(void)
IVectorView_VoiceInformation_Release(voices);
- IInstalledVoicesStatic_Release(voices_static);
+ hr = IInstalledVoicesStatic_get_DefaultVoice(voices_static, &voice);
+ todo_wine ok(hr == S_OK, "IInstalledVoicesStatic_get_DefaultVoice failed, hr %#lx\n", hr);
+
+ if (hr == S_OK)
+ {
+ IVoiceInformation_get_Description(voice, &str2);
+ trace("SpeechSynthesizer default voice %s.\n", debugstr_hstring(str2));
+
+ WindowsDeleteString(str2);
+ ref = IVoiceInformation_Release(voice);
+ ok(ref == 0, "Got unexpected ref %lu.\n", ref);
+ }
+ IInstalledVoicesStatic_Release(voices_static);
IAgileObject_Release(agile_object);
IInspectable_Release(inspectable);
+ /* Test Synthesizer */
hr = IActivationFactory_QueryInterface(factory, &IID_ISpeechSynthesizer, (void **)&synthesizer);
ok(hr == E_NOINTERFACE, "Got unexpected hr %#lx.\n", hr);
hr = RoActivateInstance(str, &inspectable);
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+ WindowsDeleteString(str);
hr = IInspectable_QueryInterface(inspectable, &IID_ISpeechSynthesizer, (void **)&synthesizer);
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+ /* Test SynthesizeTextToStreamAsync */
+ hr = WindowsCreateString(simple_synth_text, wcslen(simple_synth_text), &str);
+ ok(hr == S_OK, "WindowsCreateString failed, hr %#lx\n", hr);
+
+ hr = ISpeechSynthesizer_SynthesizeTextToStreamAsync(synthesizer, NULL, &operation_ss_stream);
+ todo_wine ok(hr == S_OK, "ISpeechSynthesizer_SynthesizeTextToStreamAsync failed, hr %#lx\n", hr);
+ if(FAILED(hr)) goto skip_ss_stream;
+
+ IAsyncOperation_SpeechSynthesisStream_Release(operation_ss_stream);
+
+ hr = ISpeechSynthesizer_SynthesizeTextToStreamAsync(synthesizer, str, &operation_ss_stream);
+ todo_wine ok(hr == S_OK, "ISpeechSynthesizer_SynthesizeTextToStreamAsync failed, hr %#lx\n", hr);
+
+ await_async_inspectable((IAsyncOperation_IInspectable *)operation_ss_stream,
+ &async_inspectable_handler,
+ &IID_IAsyncOperationCompletedHandler_SpeechSynthesisStream);
+ check_async_info((IInspectable *)operation_ss_stream, 2, Completed, S_OK);
+ check_interface(operation_ss_stream, &IID_IAsyncOperation_SpeechSynthesisStream, TRUE);
+ check_interface(operation_ss_stream, &IID_IAgileObject, TRUE);
+
+ hr = IAsyncOperation_SpeechSynthesisStream_GetResults(operation_ss_stream, &ss_stream);
+ todo_wine ok(hr == S_OK, "IAsyncOperation_SpeechSynthesisStream_GetResults failed, hr %#lx\n", hr);
+
+ if (hr == S_OK)
+ {
+ hr = ISpeechSynthesisStream_get_Markers(ss_stream, &media_markers);
+ todo_wine ok(hr == S_OK, "ISpeechSynthesisStream_get_Markers failed, hr %#lx\n", hr);
+ check_interface(media_markers, &IID_IVectorView_IMediaMarker, TRUE);
+ check_interface(media_markers, &IID_IIterable_IMediaMarker, TRUE);
+ check_interface(media_markers, &IID_IAgileObject, TRUE);
+
+ ref = IVectorView_IMediaMarker_Release(media_markers);
+ todo_wine ok(ref == 0, "Got unexpected ref %lu.\n", ref);
+
+ ref = ISpeechSynthesisStream_Release(ss_stream);
+ todo_wine ok(ref == 0, "Got unexpected ref %lu.\n", ref);
+ }
+
+ IAsyncOperation_SpeechSynthesisStream_Release(operation_ss_stream);
+
+ /* Test SynthesizeSsmlToStreamAsync */
+ hr = WindowsCreateString(simple_ssml, wcslen(simple_ssml), &str2);
+ ok(hr == S_OK, "WindowsCreateString failed, hr %#lx\n", hr);
+
+ hr = ISpeechSynthesizer_SynthesizeSsmlToStreamAsync(synthesizer, str2, &operation_ss_stream);
+ todo_wine ok(hr == S_OK, "ISpeechSynthesizer_SynthesizeSsmlToStreamAsync failed, hr %#lx\n", hr);
+ await_async_inspectable((IAsyncOperation_IInspectable *)operation_ss_stream,
+ &async_inspectable_handler,
+ &IID_IAsyncOperationCompletedHandler_SpeechSynthesisStream);
+ check_async_info((IInspectable *)operation_ss_stream, 3, Completed, S_OK);
+ check_interface(operation_ss_stream, &IID_IAsyncOperation_SpeechSynthesisStream, TRUE);
+ check_interface(operation_ss_stream, &IID_IAgileObject, TRUE);
+
+ hr = IAsyncOperation_SpeechSynthesisStream_GetResults(operation_ss_stream, &ss_stream);
+ todo_wine ok(hr == S_OK, "IAsyncOperation_SpeechSynthesisStream_GetResults failed, hr %#lx\n", hr);
+
+ if (hr == S_OK)
+ {
+ check_interface(ss_stream, &IID_ISpeechSynthesisStream, TRUE);
+ check_interface(ss_stream, &IID_IAgileObject, TRUE);
+
+ ref = ISpeechSynthesisStream_Release(ss_stream);
+ ok(ref == 0, "Got unexpected ref %lu.\n", ref);
+ }
+
+ IAsyncOperation_SpeechSynthesisStream_Release(operation_ss_stream);
+
+ operation_ss_stream = (void *)0xdeadbeef;
+ hr = ISpeechSynthesizer_SynthesizeSsmlToStreamAsync(synthesizer, NULL, &operation_ss_stream);
+ /* Broken on Win 8 + 8.1 */
+ todo_wine ok(hr == S_OK || broken(hr == E_INVALIDARG), "ISpeechSynthesizer_SynthesizeSsmlToStreamAsync failed, hr %#lx\n", hr);
+
+ if (hr == S_OK)
+ {
+ todo_wine ok(!!operation_ss_stream, "operation_ss_stream had value %p.\n", operation_ss_stream);
+ IAsyncOperation_SpeechSynthesisStream_Release(operation_ss_stream);
+ }
+ else todo_wine ok(operation_ss_stream == NULL, "operation_ss_stream had value %p.\n", operation_ss_stream);
+
+ operation_ss_stream = (void *)0xdeadbeef;
+ hr = ISpeechSynthesizer_SynthesizeSsmlToStreamAsync(synthesizer, str, &operation_ss_stream);
+ /* Broken on Win 8 + 8.1 */
+ todo_wine ok(hr == S_OK || broken(hr == SPERR_WINRT_INCORRECT_FORMAT), "ISpeechSynthesizer_SynthesizeSsmlToStreamAsync failed, hr %#lx\n", hr);
+
+ if (hr == S_OK)
+ {
+ todo_wine ok(!!operation_ss_stream, "operation_ss_stream had value %p.\n", operation_ss_stream);
+ IAsyncOperation_SpeechSynthesisStream_Release(operation_ss_stream);
+ }
+ else todo_wine ok(operation_ss_stream == NULL, "operation_ss_stream had value %p.\n", operation_ss_stream);
+
+ WindowsDeleteString(str2);
+
+skip_ss_stream:
+ WindowsDeleteString(str);
+
hr = IInspectable_QueryInterface(inspectable, &IID_IClosable, (void **)&closable);
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
hr = IInspectable_QueryInterface(inspectable, &IID_ISpeechSynthesizer2, (void **)&synthesizer2);
- ok(hr == S_OK ||
- broken(hr == E_NOINTERFACE), /* requires newer Windows */
- "Got unexpected hr %#lx.\n", hr);
+ ok(hr == S_OK || broken(hr == E_NOINTERFACE), "Got unexpected hr %#lx.\n", hr); /* Requires Win10 >= 1703 */
if (hr == S_OK)
{
@@ -927,8 +1046,6 @@ static void test_SpeechSynthesizer(void)
ok(!ref, "Got unexpected ref %lu.\n", ref);
IActivationFactory_Release(factory);
- WindowsDeleteString(str);
-
RoUninitialize();
}
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/217
June 14, 2022
[PATCH v5 5/9] windows.media.speech/tests: Handle a possible race condition.
by Bernhard Kölbl
From: Bernhard Kölbl <besentv(a)gmail.com>
Signed-off-by: Bernhard Kölbl <besentv(a)gmail.com>
---
dlls/windows.media.speech/tests/speech.c | 33 ++++++++++++++----------
1 file changed, 20 insertions(+), 13 deletions(-)
diff --git a/dlls/windows.media.speech/tests/speech.c b/dlls/windows.media.speech/tests/speech.c
index 421819fd10a..d6c0c5e1988 100644
--- a/dlls/windows.media.speech/tests/speech.c
+++ b/dlls/windows.media.speech/tests/speech.c
@@ -1122,26 +1122,33 @@ static void test_SpeechRecognizer(void)
compilation_result = (void*)0xdeadbeef;
hr = IAsyncOperation_SpeechRecognitionCompilationResult_GetResults(operation, &compilation_result);
- ok(hr == E_ILLEGAL_METHOD_CALL, "Got unexpected hr %#lx.\n", hr);
- ok(compilation_result == (void*)0xdeadbeef, "Compilation result had value %p.\n", compilation_result);
+ ok(hr == E_ILLEGAL_METHOD_CALL || hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+
+ if (hr == E_ILLEGAL_METHOD_CALL) /* Sometimes the operation could have already finished here, */
+ /* if so skip waiting and getting the results a second time. */
+ {
+ ok(compilation_result == (void*)0xdeadbeef, "Compilation result had value %p.\n", compilation_result);
- await_async_inspectable((IAsyncOperation_IInspectable *)operation,
- &compilation_handler,
- &IID_IAsyncOperationCompletedHandler_SpeechRecognitionCompilationResult);
- check_async_info((IInspectable *)operation, 1, Completed, S_OK);
+ await_async_inspectable((IAsyncOperation_IInspectable *)operation,
+ &compilation_handler,
+ &IID_IAsyncOperationCompletedHandler_SpeechRecognitionCompilationResult);
- hr = IAsyncOperation_SpeechRecognitionCompilationResult_put_Completed(operation, NULL);
- ok(hr == E_ILLEGAL_DELEGATE_ASSIGNMENT, "Got unexpected hr %#lx.\n", hr);
+ hr = IAsyncOperation_SpeechRecognitionCompilationResult_put_Completed(operation, NULL);
+ ok(hr == E_ILLEGAL_DELEGATE_ASSIGNMENT, "Got unexpected hr %#lx.\n", hr);
- hr = IAsyncOperation_SpeechRecognitionCompilationResult_get_Completed(operation, &handler);
- ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+ hr = IAsyncOperation_SpeechRecognitionCompilationResult_get_Completed(operation, &handler);
+ ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
- compilation_result = (void*)0xdeadbeef;
- hr = IAsyncOperation_SpeechRecognitionCompilationResult_GetResults(operation, &compilation_result);
- ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+ compilation_result = (void*)0xdeadbeef;
+ hr = IAsyncOperation_SpeechRecognitionCompilationResult_GetResults(operation, &compilation_result);
+ ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+ }
+ ok(compilation_result != (void*)0xdeadbeef, "Compilation result had value %p.\n", compilation_result);
check_interface(compilation_result, &IID_IAgileObject, TRUE);
+ check_async_info((IInspectable *)operation, 1, Completed, S_OK);
+
hr = ISpeechRecognitionCompilationResult_get_Status(compilation_result, &result_status);
ok(hr == S_OK, "ISpeechRecognitionCompilationResult_get_Status failed, hr %#lx.\n", hr);
ok(result_status == SpeechRecognitionResultStatus_Success, "Got unexpected status %#x.\n", result_status);
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/217
June 14, 2022
[PATCH v5 4/9] windows.media.speech/tests: Remove a useless thread id trace.
by Bernhard Kölbl
From: Bernhard Kölbl <besentv(a)gmail.com>
Signed-off-by: Bernhard Kölbl <besentv(a)gmail.com>
---
dlls/windows.media.speech/tests/speech.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/dlls/windows.media.speech/tests/speech.c b/dlls/windows.media.speech/tests/speech.c
index 5e74b90bf9a..421819fd10a 100644
--- a/dlls/windows.media.speech/tests/speech.c
+++ b/dlls/windows.media.speech/tests/speech.c
@@ -331,7 +331,6 @@ struct async_inspectable_handler
HANDLE event_block;
HANDLE event_finished;
- DWORD thread_id;
};
static inline struct async_inspectable_handler *impl_from_IAsyncOperationCompletedHandler_IInspectable( IAsyncOperationCompletedHandler_IInspectable *iface )
@@ -378,9 +377,8 @@ HRESULT WINAPI async_inspectable_handler_Invoke( IAsyncOperationCompletedHandler
AsyncStatus status )
{
struct async_inspectable_handler *impl = impl_from_IAsyncOperationCompletedHandler_IInspectable(iface);
- DWORD id = GetCurrentThreadId();
+
trace("Iface %p, sender %p, status %d.\n", iface, sender, status);
- trace("Caller thread id %lu callback thread id %lu.\n", impl->thread_id, id);
/* Signal finishing of the handler. */
if (impl->event_finished) SetEvent(impl->event_finished);
@@ -1217,7 +1215,6 @@ static void test_SpeechRecognizer(void)
async_inspectable_handler_create_static(&compilation_handler, &IID_IAsyncOperationCompletedHandler_SpeechRecognitionCompilationResult);
compilation_handler.event_block = CreateEventW(NULL, FALSE, FALSE, NULL);
compilation_handler.event_finished = CreateEventW(NULL, FALSE, FALSE, NULL);
- compilation_handler.thread_id = GetCurrentThreadId();
ok(!!compilation_handler.event_block, "event_block wasn't created.\n");
ok(!!compilation_handler.event_finished, "event_finished wasn't created.\n");
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/217
June 14, 2022
[PATCH v5 3/9] include/windows.media.speechsynthesis.idl: Update file to newer formatting.
by Bernhard Kölbl
From: Bernhard Kölbl <besentv(a)gmail.com>
I.e. get rid of nested namespaces and forward declares,
separate attributes with commas and right align pointer declarations.
Signed-off-by: Bernhard Kölbl <besentv(a)gmail.com>
---
include/windows.media.speechsynthesis.idl | 305 ++++++++++------------
1 file changed, 143 insertions(+), 162 deletions(-)
diff --git a/include/windows.media.speechsynthesis.idl b/include/windows.media.speechsynthesis.idl
index 10fd2f5c897..c4a0eb06106 100644
--- a/include/windows.media.speechsynthesis.idl
+++ b/include/windows.media.speechsynthesis.idl
@@ -23,181 +23,162 @@
import "inspectable.idl";
import "windows.foundation.idl";
import "windows.media.idl";
+import "windows.storage.streams.idl";
-namespace Windows {
- namespace Foundation {
- interface IClosable;
- }
- namespace Media {
- namespace SpeechSynthesis {
- typedef enum VoiceGender VoiceGender;
- interface IInstalledVoicesStatic;
- interface IInstalledVoicesStatic2;
- interface ISpeechSynthesizer;
- interface ISpeechSynthesizer2;
- interface IVoiceInformation;
- interface ISpeechSynthesisStream;
- runtimeclass SpeechSynthesizer;
- runtimeclass VoiceInformation;
- runtimeclass SpeechSynthesizerOptions;
- runtimeclass SpeechSynthesisStream;
- }
- }
- namespace Storage {
- namespace Streams {
- interface IRandomAccessStreamWithContentType;
- interface IRandomAccessStream;
- interface IInputStream;
- interface IOutputStream;
- interface IContentTypeProvider;
- }
- }
-}
+namespace Windows.Media.SpeechSynthesis
+{
+ typedef enum VoiceGender VoiceGender;
+ interface IInstalledVoicesStatic;
+ interface IInstalledVoicesStatic2;
+ interface ISpeechSynthesizer;
+ interface ISpeechSynthesizer2;
+ interface IVoiceInformation;
+ interface ISpeechSynthesisStream;
+ runtimeclass SpeechSynthesizer;
+ runtimeclass VoiceInformation;
+ runtimeclass SpeechSynthesizerOptions;
+ runtimeclass SpeechSynthesisStream;
-namespace Windows {
- namespace Media {
- namespace SpeechSynthesis {
- declare {
- interface Windows.Foundation.Collections.IIterator<Windows.Media.SpeechSynthesis.VoiceInformation*>;
- interface Windows.Foundation.Collections.IIterable<Windows.Media.SpeechSynthesis.VoiceInformation*>;
- interface Windows.Foundation.Collections.IVectorView<Windows.Media.SpeechSynthesis.VoiceInformation*>;
- interface Windows.Foundation.IAsyncOperation<Windows.Media.SpeechSynthesis.SpeechSynthesisStream*>;
- interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Media.SpeechSynthesis.SpeechSynthesisStream*>;
- }
- }
+ declare
+ {
+ interface Windows.Foundation.Collections.IIterable<Windows.Media.SpeechSynthesis.VoiceInformation*>;
+ interface Windows.Foundation.Collections.IIterator<Windows.Media.SpeechSynthesis.VoiceInformation*>;
+ interface Windows.Foundation.Collections.IVectorView<Windows.Media.SpeechSynthesis.VoiceInformation*>;
+ interface Windows.Foundation.IAsyncOperation<Windows.Media.SpeechSynthesis.SpeechSynthesisStream*>;
+ interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Media.SpeechSynthesis.SpeechSynthesisStream*>;
}
-}
-namespace Windows {
- namespace Media {
- namespace SpeechSynthesis {
- [contract(Windows.Foundation.UniversalApiContract, 1.0)]
- enum VoiceGender
- {
- Male = 0,
- Female = 1
- };
+ [
+ contract(Windows.Foundation.UniversalApiContract, 1.0)
+ ]
+ enum VoiceGender
+ {
+ Male = 0,
+ Female = 1
+ };
- [contract(Windows.Foundation.UniversalApiContract, 1.0)]
- [exclusiveto(Windows.Media.SpeechSynthesis.SpeechSynthesisStream)]
- [uuid(83e46e93-244c-4622-ba0b-6229c4d0d65d)]
- interface ISpeechSynthesisStream : IInspectable
- requires
- Windows.Storage.Streams.IRandomAccessStreamWithContentType,
- Windows.Storage.Streams.IRandomAccessStream,
- Windows.Foundation.IClosable,
- Windows.Storage.Streams.IInputStream,
- Windows.Storage.Streams.IOutputStream,
- Windows.Storage.Streams.IContentTypeProvider
- {
- [propget] HRESULT Markers([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Media.IMediaMarker*>** value);
- }
+ [
+ contract(Windows.Foundation.UniversalApiContract, 1.0),
+ exclusiveto(Windows.Media.SpeechSynthesis.SpeechSynthesisStream),
+ uuid(83e46e93-244c-4622-ba0b-6229c4d0d65d)
+ ]
+ interface ISpeechSynthesisStream : IInspectable
+ requires
+ Windows.Storage.Streams.IRandomAccessStreamWithContentType,
+ Windows.Storage.Streams.IRandomAccessStream,
+ Windows.Foundation.IClosable,
+ Windows.Storage.Streams.IInputStream,
+ Windows.Storage.Streams.IOutputStream,
+ Windows.Storage.Streams.IContentTypeProvider
+ {
+ [propget] HRESULT Markers([out, retval] Windows.Foundation.Collections.IVectorView<Windows.Media.IMediaMarker*> **value);
+ }
- [
- contract(Windows.Foundation.UniversalApiContract, 1.0),
- exclusiveto(Windows.Media.SpeechSynthesis.SpeechSynthesizer),
- uuid(ce9f7c76-97f4-4ced-ad68-d51c458e45c6)
- ]
- interface ISpeechSynthesizer : IInspectable
- {
- HRESULT SynthesizeTextToStreamAsync([in] HSTRING text, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.SpeechSynthesis.SpeechSynthesisStream*> **operation);
- HRESULT SynthesizeSsmlToStreamAsync([in] HSTRING Ssml, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.SpeechSynthesis.SpeechSynthesisStream*> **operation);
- [propput] HRESULT Voice([in] VoiceInformation *value);
- [propget] HRESULT Voice([out] [retval] VoiceInformation **value);
- }
+ [
+ contract(Windows.Foundation.UniversalApiContract, 1.0),
+ exclusiveto(Windows.Media.SpeechSynthesis.SpeechSynthesizer),
+ uuid(ce9f7c76-97f4-4ced-ad68-d51c458e45c6)
+ ]
+ interface ISpeechSynthesizer : IInspectable
+ {
+ HRESULT SynthesizeTextToStreamAsync([in] HSTRING text, [out, retval] Windows.Foundation.IAsyncOperation<Windows.Media.SpeechSynthesis.SpeechSynthesisStream*> **operation);
+ HRESULT SynthesizeSsmlToStreamAsync([in] HSTRING Ssml, [out, retval] Windows.Foundation.IAsyncOperation<Windows.Media.SpeechSynthesis.SpeechSynthesisStream*> **operation);
+ [propput] HRESULT Voice([in] VoiceInformation *value);
+ [propget] HRESULT Voice([out, retval] VoiceInformation **value);
+ }
- [
- contract(Windows.Foundation.UniversalApiContract, 1.0),
- exclusiveto(Windows.Media.SpeechSynthesis.SpeechSynthesizer),
- uuid(a7c5ecb2-4339-4d6a-bbf8-c7a4f1544c2e)
- ]
- interface ISpeechSynthesizer2 : IInspectable
- {
- [propget] HRESULT Options([out, retval] SpeechSynthesizerOptions **value);
- }
+ [
+ contract(Windows.Foundation.UniversalApiContract, 1.0),
+ exclusiveto(Windows.Media.SpeechSynthesis.SpeechSynthesizer),
+ uuid(a7c5ecb2-4339-4d6a-bbf8-c7a4f1544c2e)
+ ]
+ interface ISpeechSynthesizer2 : IInspectable
+ {
+ [propget] HRESULT Options([out, retval] SpeechSynthesizerOptions **value);
+ }
- [
- contract(Windows.Foundation.UniversalApiContract, 1.0),
- exclusiveto(Windows.Media.SpeechSynthesis.VoiceInformation),
- uuid(b127d6a4-1291-4604-aa9c-83134083352c)
- ]
- interface IVoiceInformation : IInspectable
- {
- [propget] HRESULT DisplayName([out] [retval] HSTRING* value);
- [propget] HRESULT Id([out] [retval] HSTRING* value);
- [propget] HRESULT Language([out] [retval] HSTRING* value);
- [propget] HRESULT Description([out] [retval] HSTRING* value);
- [propget] HRESULT Gender([out] [retval] VoiceGender* value);
- }
+ [
+ contract(Windows.Foundation.UniversalApiContract, 1.0),
+ exclusiveto(Windows.Media.SpeechSynthesis.VoiceInformation),
+ uuid(b127d6a4-1291-4604-aa9c-83134083352c)
+ ]
+ interface IVoiceInformation : IInspectable
+ {
+ [propget] HRESULT DisplayName([out, retval] HSTRING *value);
+ [propget] HRESULT Id([out, retval] HSTRING *value);
+ [propget] HRESULT Language([out, retval] HSTRING *value);
+ [propget] HRESULT Description([out, retval] HSTRING *value);
+ [propget] HRESULT Gender([out, retval] VoiceGender *value);
+ }
- [
- contract(Windows.Foundation.UniversalApiContract, 1.0),
- exclusiveto(Windows.Media.SpeechSynthesis.SpeechSynthesizerOptions),
- uuid(a0e23871-cc3d-43c9-91b1-ee185324d83d)
- ]
- interface ISpeechSynthesizerOptions : IInspectable
- {
- [propget] HRESULT IncludeWordBoundaryMetadata([out, retval] boolean *value);
- [propput] HRESULT IncludeWordBoundaryMetadata([in] boolean value);
- [propget] HRESULT IncludeSentenceBoundaryMetadata([out, retval] boolean *value);
- [propput] HRESULT IncludeSentenceBoundaryMetadata([in] boolean value);
- }
+ [
+ contract(Windows.Foundation.UniversalApiContract, 1.0),
+ exclusiveto(Windows.Media.SpeechSynthesis.SpeechSynthesizerOptions),
+ uuid(a0e23871-cc3d-43c9-91b1-ee185324d83d)
+ ]
+ interface ISpeechSynthesizerOptions : IInspectable
+ {
+ [propget] HRESULT IncludeWordBoundaryMetadata([out, retval] boolean *value);
+ [propput] HRESULT IncludeWordBoundaryMetadata([in] boolean value);
+ [propget] HRESULT IncludeSentenceBoundaryMetadata([out, retval] boolean *value);
+ [propput] HRESULT IncludeSentenceBoundaryMetadata([in] boolean value);
+ }
- [
- contract(Windows.Foundation.UniversalApiContract, 1.0),
- exclusiveto(Windows.Media.SpeechSynthesis.SpeechSynthesizer),
- uuid(7d526ecc-7533-4c3f-85be-888c2baeebdc)
- ]
- interface IInstalledVoicesStatic : IInspectable
- {
- [propget] HRESULT AllVoices([out, retval] Windows.Foundation.Collections.IVectorView<VoiceInformation*>** value);
- [propget] HRESULT DefaultVoice([out, retval] VoiceInformation** value);
- }
+ [
+ contract(Windows.Foundation.UniversalApiContract, 1.0),
+ exclusiveto(Windows.Media.SpeechSynthesis.SpeechSynthesizer),
+ uuid(7d526ecc-7533-4c3f-85be-888c2baeebdc)
+ ]
+ interface IInstalledVoicesStatic : IInspectable
+ {
+ [propget] HRESULT AllVoices([out, retval] Windows.Foundation.Collections.IVectorView<VoiceInformation*> **value);
+ [propget] HRESULT DefaultVoice([out, retval] VoiceInformation **value);
+ }
- [
- contract(Windows.Foundation.UniversalApiContract, 1.0),
- marshaling_behavior(agile)
- ]
- runtimeclass VoiceInformation
- {
- [default] interface Windows.Media.SpeechSynthesis.IVoiceInformation;
- }
+ [
+ contract(Windows.Foundation.UniversalApiContract, 1.0),
+ marshaling_behavior(agile)
+ ]
+ runtimeclass VoiceInformation
+ {
+ [default] interface Windows.Media.SpeechSynthesis.IVoiceInformation;
+ }
- [
- contract(Windows.Foundation.UniversalApiContract, 1.0),
- marshaling_behavior(agile)
- ]
- runtimeclass SpeechSynthesizerOptions
- {
- [default] interface Windows.Media.SpeechSynthesis.ISpeechSynthesizerOptions;
- }
+ [
+ contract(Windows.Foundation.UniversalApiContract, 1.0),
+ marshaling_behavior(agile)
+ ]
+ runtimeclass SpeechSynthesizerOptions
+ {
+ [default] interface Windows.Media.SpeechSynthesis.ISpeechSynthesizerOptions;
+ }
- [contract(Windows.Foundation.UniversalApiContract, 1.0)]
- [marshaling_behavior(agile)]
- runtimeclass SpeechSynthesisStream
- {
- [default] interface Windows.Media.SpeechSynthesis.ISpeechSynthesisStream;
- interface Windows.Storage.Streams.IRandomAccessStreamWithContentType;
- interface Windows.Storage.Streams.IContentTypeProvider;
- interface Windows.Storage.Streams.IRandomAccessStream;
- interface Windows.Storage.Streams.IOutputStream;
- interface Windows.Foundation.IClosable;
- interface Windows.Storage.Streams.IInputStream;
- }
+ [
+ contract(Windows.Foundation.UniversalApiContract, 1.0),
+ marshaling_behavior(agile)
+ ]
+ runtimeclass SpeechSynthesisStream
+ {
+ [default] interface Windows.Media.SpeechSynthesis.ISpeechSynthesisStream;
+ interface Windows.Storage.Streams.IRandomAccessStreamWithContentType;
+ interface Windows.Storage.Streams.IContentTypeProvider;
+ interface Windows.Storage.Streams.IRandomAccessStream;
+ interface Windows.Storage.Streams.IOutputStream;
+ interface Windows.Foundation.IClosable;
+ interface Windows.Storage.Streams.IInputStream;
+ }
- [
- activatable(Windows.Foundation.UniversalApiContract, 1.0),
- contract(Windows.Foundation.UniversalApiContract, 1.0),
- marshaling_behavior(agile),
- static(Windows.Media.SpeechSynthesis.IInstalledVoicesStatic, Windows.Foundation.UniversalApiContract, 1.0),
- static(Windows.Media.SpeechSynthesis.IInstalledVoicesStatic2, Windows.Foundation.UniversalApiContract, 5.0)
- ]
- runtimeclass SpeechSynthesizer
- {
- [default] interface Windows.Media.SpeechSynthesis.ISpeechSynthesizer;
- interface Windows.Foundation.IClosable;
- [contract(Windows.Foundation.UniversalApiContract, 4.0)] interface Windows.Media.SpeechSynthesis.ISpeechSynthesizer2;
- }
- }
+ [
+ activatable(Windows.Foundation.UniversalApiContract, 1.0),
+ contract(Windows.Foundation.UniversalApiContract, 1.0),
+ marshaling_behavior(agile),
+ static(Windows.Media.SpeechSynthesis.IInstalledVoicesStatic, Windows.Foundation.UniversalApiContract, 1.0),
+ static(Windows.Media.SpeechSynthesis.IInstalledVoicesStatic2, Windows.Foundation.UniversalApiContract, 5.0)
+ ]
+ runtimeclass SpeechSynthesizer
+ {
+ [default] interface Windows.Media.SpeechSynthesis.ISpeechSynthesizer;
+ interface Windows.Foundation.IClosable;
+ [contract(Windows.Foundation.UniversalApiContract, 4.0)] interface Windows.Media.SpeechSynthesis.ISpeechSynthesizer2;
}
}
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/217
June 14, 2022
[PATCH v5 2/9] include/windows.media.idl: Move IMediaMarker collections from speechsynthesis.
by Bernhard Kölbl
From: Bernhard Kölbl <besentv(a)gmail.com>
Signed-off-by: Bernhard Kölbl <besentv(a)gmail.com>
---
include/windows.media.idl | 9 +++++++++
include/windows.media.speechsynthesis.idl | 7 -------
2 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/include/windows.media.idl b/include/windows.media.idl
index 1c0b3e82c1d..2c80e49a92b 100644
--- a/include/windows.media.idl
+++ b/include/windows.media.idl
@@ -26,6 +26,15 @@ import "windows.foundation.idl";
namespace Windows.Media
{
interface IMediaControl;
+ interface IMediaMarker;
+
+ declare
+ {
+ interface Windows.Foundation.Collections.IIterable<Windows.Media.IMediaMarker*>;
+ interface Windows.Foundation.Collections.IIterator<Windows.Media.IMediaMarker*>;
+ interface Windows.Foundation.Collections.IVectorView<Windows.Media.IMediaMarker*>;
+ interface Windows.Foundation.Collections.IVector<Windows.Media.IMediaMarker*>;
+ }
[
contract(Windows.Foundation.UniversalApiContract, 1.0),
diff --git a/include/windows.media.speechsynthesis.idl b/include/windows.media.speechsynthesis.idl
index b2c86f37137..10fd2f5c897 100644
--- a/include/windows.media.speechsynthesis.idl
+++ b/include/windows.media.speechsynthesis.idl
@@ -54,12 +54,6 @@ namespace Windows {
}
}
-namespace Windows {
- namespace Media {
- interface IMediaMarker;
- }
-}
-
namespace Windows {
namespace Media {
namespace SpeechSynthesis {
@@ -67,7 +61,6 @@ namespace Windows {
interface Windows.Foundation.Collections.IIterator<Windows.Media.SpeechSynthesis.VoiceInformation*>;
interface Windows.Foundation.Collections.IIterable<Windows.Media.SpeechSynthesis.VoiceInformation*>;
interface Windows.Foundation.Collections.IVectorView<Windows.Media.SpeechSynthesis.VoiceInformation*>;
- interface Windows.Foundation.Collections.IVectorView<Windows.Media.IMediaMarker*>;
interface Windows.Foundation.IAsyncOperation<Windows.Media.SpeechSynthesis.SpeechSynthesisStream*>;
interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Media.SpeechSynthesis.SpeechSynthesisStream*>;
}
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/217
June 14, 2022
[PATCH v5 1/9] include/windows.media.idl: Update file to newer formatting.
by Bernhard Kölbl
From: Bernhard Kölbl <besentv(a)gmail.com>
I.e. get rid of nested namespaces and forward declares,
separate attributes with commas and right align pointer declarations.
Signed-off-by: Bernhard Kölbl <besentv(a)gmail.com>
---
include/windows.media.idl | 28 +++++++++++++---------------
1 file changed, 13 insertions(+), 15 deletions(-)
diff --git a/include/windows.media.idl b/include/windows.media.idl
index fe81c768361..1c0b3e82c1d 100644
--- a/include/windows.media.idl
+++ b/include/windows.media.idl
@@ -23,21 +23,19 @@
import "inspectable.idl";
import "windows.foundation.idl";
-namespace Windows {
- namespace Media {
- interface IMediaControl;
- }
-}
+namespace Windows.Media
+{
+ interface IMediaControl;
-namespace Windows {
- namespace Media {
- [contract(Windows.Foundation.UniversalApiContract, 1.0)]
- [uuid(1803def8-dca5-4b6f-9c20-e3d3c0643625)]
- interface IMediaMarker : IInspectable
- {
- [propget] HRESULT Time([out] [retval] Windows.Foundation.TimeSpan* value);
- [propget] HRESULT MediaMarkerType([out] [retval] HSTRING* value);
- [propget] HRESULT Text([out] [retval] HSTRING* value);
- }
+ [
+ contract(Windows.Foundation.UniversalApiContract, 1.0),
+ uuid(1803def8-dca5-4b6f-9c20-e3d3c0643625)
+ ]
+ interface IMediaMarker : IInspectable
+ {
+ [propget] HRESULT Time([out, retval] Windows.Foundation.TimeSpan *value);
+ [propget] HRESULT MediaMarkerType([out, retval] HSTRING *value);
+ [propget] HRESULT Text([out, retval] HSTRING *value);
}
+
}
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/217
June 14, 2022
[PATCH v5 0/9] MR217: windows.media.speech: ISpeechSynthesisStream stub implementation.
by Bernhard Kölbl
Signed-off-by: Bernhard Kölbl <besentv(a)gmail.com>
--
v5: windows.media.speech: Add stub ISpeechSynthesisStream iface.
windows.media.speech: Return IAsyncOperation from synthesizer_SynthesizeSsmlToStreamAsync.
windows.media.speech: Return IAsyncOperation from synthesizer_SynthesizeTextToStreamAsync.
windows.media.speech/tests: Add basic tests for ssml/text to stream functions.
windows.media.speech/tests: Handle a possible race condition.
windows.media.speech/tests: Remove a useless thread id trace.
include/windows.media.speechsynthesis.idl: Update file to newer formatting.
include/windows.media.idl: Move IMediaMarker collections from speechsynthesis.
include/windows.media.idl: Update file to newer formatting.
https://gitlab.winehq.org/wine/wine/-/merge_requests/217
June 14, 2022
Re: [PATCH 1/5] mfplat/buffer: Fix size for IMC2/IMC4 buffers with odd height.
by Giovanni Mascellani
Hi,
Il 13/06/22 18:27, Nikolay Sivov ha scritto:
> Do we have all interesting tests cases for MFGetPlaneSize duplicated in
> other tests, to remove this one? Also if it needs to be removed
> multiplier field becomes unused.
I think test_MFGetPlaneSize() does a more thorough testing. But maybe
even better would be to merge the two test datasets. All these tests are
quite quick and shouldn't add too much load. I'll submit another patch set.
You're right the unused multiplier.
Thanks, Giovanni.
June 14, 2022
Re: [PATCH v4 0/9] MR217: windows.media.speech: ISpeechSynthesisStream stub implementation.
by Bernhard Kölbl
On Mon Jun 13 19:23:37 2022 +0000, Rémi Bernon wrote:
> This seems unrelated, could be done in next commit.
This was more or less an accidental copy and paste error.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/217#note_2026
June 14, 2022
Re: [PATCH 5/5] mfplat/buffer: Redirect all Lock2D() implementations to Lock2DSize().
by Giovanni Mascellani
Hi,
Il 13/06/22 18:33, Nikolay Sivov ha scritto:
> I didn't do that to avoid two traces per Lock2D() call. Why is it better
> to forward?
Well, we get rid of something like 70 lines of boilerplate and
duplicated code. If you don't like the double trace, I can get rid of
the one in Lock2D().
Giovanni.
June 14, 2022