winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
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
List overview
wine-commits
November 2021
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
2 participants
951 discussions
Start a n
N
ew thread
Rémi Bernon : dinput: Check for DIEFF_POLAR axes count before capacity.
by Alexandre Julliard
10 Nov '21
10 Nov '21
Module: wine Branch: master Commit: 4289bae3b4be81ea47adc18c60f26b7dae8691a0 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=4289bae3b4be81ea47adc18c…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Wed Nov 10 10:52:26 2021 +0100 dinput: Check for DIEFF_POLAR axes count before capacity. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=51922
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dinput/joystick_hid.c | 4 ++-- dlls/dinput8/tests/hid.c | 6 +----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/dlls/dinput/joystick_hid.c b/dlls/dinput/joystick_hid.c index dd77f557e3e..cec02ccd74a 100644 --- a/dlls/dinput/joystick_hid.c +++ b/dlls/dinput/joystick_hid.c @@ -2063,14 +2063,14 @@ static HRESULT WINAPI hid_joystick_effect_GetParameters( IDirectInputEffect *ifa if (!direction_flags) return DIERR_INVALIDPARAM; count = params->cAxes = impl->params.cAxes; - if (capacity < params->cAxes) return DIERR_MOREDATA; if (!count) params->dwFlags &= ~(DIEFF_CARTESIAN | DIEFF_POLAR | DIEFF_SPHERICAL); + if ((direction_flags & DIEFF_POLAR) && count != 2) return DIERR_INVALIDPARAM; + if (capacity < params->cAxes) return DIERR_MOREDATA; if (direction_flags & DIEFF_SPHERICAL) memcpy( directions, impl->params.rglDirection, count * sizeof(LONG) ); else if (direction_flags & DIEFF_POLAR) { - if (count != 2) return DIERR_INVALIDPARAM; directions[0] = (impl->params.rglDirection[0] + 9000) % 36000; if (directions[0] < 0) directions[0] += 36000; } diff --git a/dlls/dinput8/tests/hid.c b/dlls/dinput8/tests/hid.c index 54109593a18..5b01ea3a68a 100644 --- a/dlls/dinput8/tests/hid.c +++ b/dlls/dinput8/tests/hid.c @@ -6138,11 +6138,7 @@ static void test_periodic_effect( IDirectInputDevice8W *device, HANDLE file, DWO desc.dwFlags = DIEFF_POLAR; desc.cAxes = 1; hr = IDirectInputEffect_GetParameters( effect, &desc, DIEP_DIRECTION ); - if (i != 2) - { - todo_wine_if( i == 3 ) - ok( hr == DIERR_INVALIDPARAM, "GetParameters returned %#x\n", hr ); - } + if (i != 2) ok( hr == DIERR_INVALIDPARAM, "GetParameters returned %#x\n", hr ); else ok( hr == DIERR_MOREDATA, "GetParameters returned %#x\n", hr ); desc.cAxes = 3; memset( desc.rglDirection, 0xcd, 3 * sizeof(LONG) );
1
0
0
0
Rémi Bernon : dinput: Allow DIEFF_CARTESIAN directions when cAxes matches.
by Alexandre Julliard
10 Nov '21
10 Nov '21
Module: wine Branch: master Commit: bc2ba90bd88d3a3f690473c9faf27c4ce2bddaa0 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=bc2ba90bd88d3a3f690473c9…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Wed Nov 10 10:52:25 2021 +0100 dinput: Allow DIEFF_CARTESIAN directions when cAxes matches. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=51922
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dinput/joystick_hid.c | 2 +- dlls/dinput8/tests/hid.c | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/dlls/dinput/joystick_hid.c b/dlls/dinput/joystick_hid.c index dfaf6ae83ff..dd77f557e3e 100644 --- a/dlls/dinput/joystick_hid.c +++ b/dlls/dinput/joystick_hid.c @@ -2224,7 +2224,7 @@ static HRESULT WINAPI hid_joystick_effect_SetParameters( IDirectInputEffect *ifa count = impl->params.cAxes; if (params->cAxes < count) return DIERR_INVALIDPARAM; if ((direction_flags & DIEFF_POLAR) && count != 2) return DIERR_INVALIDPARAM; - if ((direction_flags & DIEFF_CARTESIAN) && count < 2) return DIERR_INVALIDPARAM; + if ((direction_flags & DIEFF_CARTESIAN) && params->cAxes != count) return DIERR_INVALIDPARAM; if (!count) memset( directions, 0, sizeof(directions) ); else if (direction_flags & DIEFF_POLAR) diff --git a/dlls/dinput8/tests/hid.c b/dlls/dinput8/tests/hid.c index 4c1d73112cd..54109593a18 100644 --- a/dlls/dinput8/tests/hid.c +++ b/dlls/dinput8/tests/hid.c @@ -6061,11 +6061,9 @@ static void test_periodic_effect( IDirectInputDevice8W *device, HANDLE file, DWO desc.rglDirection[1] = 2000; desc.rglDirection[2] = 3000; hr = IDirectInputEffect_SetParameters( effect, &desc, DIEP_DIRECTION | DIEP_NODOWNLOAD ); - todo_wine_if( i == 2 ) ok( hr == DIERR_INVALIDPARAM, "SetParameters returned %#x\n", hr ); desc.cAxes = i; hr = IDirectInputEffect_SetParameters( effect, &desc, DIEP_DIRECTION | DIEP_NODOWNLOAD ); - todo_wine_if( i == 1 ) ok( hr == DI_DOWNLOADSKIPPED, "SetParameters returned %#x\n", hr ); desc.dwFlags = DIEFF_SPHERICAL;
1
0
0
0
Rémi Bernon : dinput8/tests: Add more force-feedback effect direction tests.
by Alexandre Julliard
10 Nov '21
10 Nov '21
Module: wine Branch: master Commit: 204763198d5a2d7957e5ba359d26b2d40f38b2c4 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=204763198d5a2d7957e5ba35…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Wed Nov 10 10:52:24 2021 +0100 dinput8/tests: Add more force-feedback effect direction tests. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=51922
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dinput8/tests/hid.c | 131 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 130 insertions(+), 1 deletion(-) diff --git a/dlls/dinput8/tests/hid.c b/dlls/dinput8/tests/hid.c index 59111db7f3a..4c1d73112cd 100644 --- a/dlls/dinput8/tests/hid.c +++ b/dlls/dinput8/tests/hid.c @@ -5476,7 +5476,7 @@ static void test_periodic_effect( IDirectInputDevice8W *device, HANDLE file, DWO LONG directions[4] = {0}; DIEFFECT desc = {0}; DWORD axes[4] = {0}; - ULONG ref, flags; + ULONG i, ref, flags; HRESULT hr; GUID guid; @@ -6037,6 +6037,135 @@ static void test_periodic_effect( IDirectInputDevice8W *device, HANDLE file, DWO ref = IDirectInputEffect_Release( effect ); ok( ref == 0, "Release returned %d\n", ref ); + + for (i = 1; i < 4; i++) + { + winetest_push_context( "%u axes", i ); + hr = IDirectInputDevice8_CreateEffect( device, &GUID_Sine, NULL, &effect, NULL ); + ok( hr == DI_OK, "CreateEffect returned %#x\n", hr ); + + desc.dwFlags = DIEFF_OBJECTIDS; + desc.cAxes = i; + desc.rgdwAxes[0] = DIDFT_ABSAXIS | DIDFT_MAKEINSTANCE( 2 ) | DIDFT_FFACTUATOR; + desc.rgdwAxes[1] = DIDFT_ABSAXIS | DIDFT_MAKEINSTANCE( 0 ) | DIDFT_FFACTUATOR; + desc.rgdwAxes[2] = DIDFT_ABSAXIS | DIDFT_MAKEINSTANCE( 1 ) | DIDFT_FFACTUATOR; + desc.rglDirection[0] = 0; + desc.rglDirection[1] = 0; + desc.rglDirection[2] = 0; + hr = IDirectInputEffect_SetParameters( effect, &desc, DIEP_AXES | DIEP_NODOWNLOAD ); + ok( hr == DI_DOWNLOADSKIPPED, "SetParameters returned %#x\n", hr ); + + desc.dwFlags = DIEFF_CARTESIAN; + desc.cAxes = i == 3 ? 2 : 3; + desc.rglDirection[0] = 1000; + desc.rglDirection[1] = 2000; + desc.rglDirection[2] = 3000; + hr = IDirectInputEffect_SetParameters( effect, &desc, DIEP_DIRECTION | DIEP_NODOWNLOAD ); + todo_wine_if( i == 2 ) + ok( hr == DIERR_INVALIDPARAM, "SetParameters returned %#x\n", hr ); + desc.cAxes = i; + hr = IDirectInputEffect_SetParameters( effect, &desc, DIEP_DIRECTION | DIEP_NODOWNLOAD ); + todo_wine_if( i == 1 ) + ok( hr == DI_DOWNLOADSKIPPED, "SetParameters returned %#x\n", hr ); + + desc.dwFlags = DIEFF_SPHERICAL; + desc.cAxes = i; + hr = IDirectInputEffect_GetParameters( effect, &desc, DIEP_DIRECTION ); + ok( hr == DI_OK, "GetParameters returned %#x\n", hr ); + desc.cAxes = 3; + memset( desc.rglDirection, 0xcd, 3 * sizeof(LONG) ); + hr = IDirectInputEffect_GetParameters( effect, &desc, DIEP_DIRECTION ); + ok( hr == DI_OK, "GetParameters returned %#x\n", hr ); + ok( desc.cAxes == i, "got cAxes %u expected 2\n", desc.cAxes ); + if (i == 1) + { + ok( desc.rglDirection[0] == 0, "got rglDirection[0] %d expected %d\n", desc.rglDirection[0], 0 ); + ok( desc.rglDirection[1] == 0xcdcdcdcd, "got rglDirection[1] %d expected %d\n", + desc.rglDirection[1], 0xcdcdcdcd ); + ok( desc.rglDirection[2] == 0xcdcdcdcd, "got rglDirection[2] %d expected %d\n", + desc.rglDirection[2], 0xcdcdcdcd ); + } + else + { + todo_wine + ok( desc.rglDirection[0] == 6343, "got rglDirection[0] %d expected %d\n", + desc.rglDirection[0], 6343 ); + if (i == 2) + { + ok( desc.rglDirection[1] == 0, "got rglDirection[1] %d expected %d\n", + desc.rglDirection[1], 0 ); + ok( desc.rglDirection[2] == 0xcdcdcdcd, "got rglDirection[2] %d expected %d\n", + desc.rglDirection[2], 0xcdcdcdcd ); + } + else + { + todo_wine + ok( desc.rglDirection[1] == 5330, "got rglDirection[1] %d expected %d\n", + desc.rglDirection[1], 5330 ); + ok( desc.rglDirection[2] == 0, "got rglDirection[2] %d expected %d\n", + desc.rglDirection[2], 0 ); + } + } + + desc.dwFlags = DIEFF_CARTESIAN; + desc.cAxes = i; + hr = IDirectInputEffect_GetParameters( effect, &desc, DIEP_DIRECTION ); + ok( hr == DI_OK, "GetParameters returned %#x\n", hr ); + desc.cAxes = 3; + memset( desc.rglDirection, 0xcd, 3 * sizeof(LONG) ); + hr = IDirectInputEffect_GetParameters( effect, &desc, DIEP_DIRECTION ); + ok( hr == DI_OK, "GetParameters returned %#x\n", hr ); + ok( desc.cAxes == i, "got cAxes %u expected 2\n", desc.cAxes ); + todo_wine + ok( desc.rglDirection[0] == 1000, "got rglDirection[0] %d expected %d\n", desc.rglDirection[0], 1000 ); + if (i == 1) + ok( desc.rglDirection[1] == 0xcdcdcdcd, "got rglDirection[1] %d expected %d\n", + desc.rglDirection[1], 0xcdcdcdcd ); + else + { + todo_wine + ok( desc.rglDirection[1] == 2000, "got rglDirection[1] %d expected %d\n", + desc.rglDirection[1], 2000 ); + } + if (i <= 2) + ok( desc.rglDirection[2] == 0xcdcdcdcd, "got rglDirection[2] %d expected %d\n", + desc.rglDirection[2], 0xcdcdcdcd ); + else + { + todo_wine + ok( desc.rglDirection[2] == 3000, "got rglDirection[2] %d expected %d\n", + desc.rglDirection[2], 3000 ); + } + + desc.dwFlags = DIEFF_POLAR; + desc.cAxes = 1; + hr = IDirectInputEffect_GetParameters( effect, &desc, DIEP_DIRECTION ); + if (i != 2) + { + todo_wine_if( i == 3 ) + ok( hr == DIERR_INVALIDPARAM, "GetParameters returned %#x\n", hr ); + } + else ok( hr == DIERR_MOREDATA, "GetParameters returned %#x\n", hr ); + desc.cAxes = 3; + memset( desc.rglDirection, 0xcd, 3 * sizeof(LONG) ); + hr = IDirectInputEffect_GetParameters( effect, &desc, DIEP_DIRECTION ); + if (i != 2) ok( hr == DIERR_INVALIDPARAM, "GetParameters returned %#x\n", hr ); + else + { + ok( hr == DI_OK, "GetParameters returned %#x\n", hr ); + ok( desc.cAxes == i, "got cAxes %u expected 2\n", desc.cAxes ); + todo_wine + ok( desc.rglDirection[0] == 15343, "got rglDirection[0] %d expected %d\n", + desc.rglDirection[0], 15343 ); + ok( desc.rglDirection[1] == 0, "got rglDirection[1] %d expected %d\n", desc.rglDirection[1], 0 ); + ok( desc.rglDirection[2] == 0xcdcdcdcd, "got rglDirection[2] %d expected %d\n", + desc.rglDirection[2], 0xcdcdcdcd ); + } + + ref = IDirectInputEffect_Release( effect ); + ok( ref == 0, "Release returned %d\n", ref ); + winetest_pop_context(); + } } static void test_condition_effect( IDirectInputDevice8W *device, HANDLE file, DWORD version )
1
0
0
0
Rémi Bernon : dinput8/tests: Add older dinput HID force-feedback tests.
by Alexandre Julliard
10 Nov '21
10 Nov '21
Module: wine Branch: master Commit: 95fca9198b2c7791bebd809888beafbecd0018b8 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=95fca9198b2c7791bebd8098…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Wed Nov 10 10:52:23 2021 +0100 dinput8/tests: Add older dinput HID force-feedback tests. Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dinput8/tests/Makefile.in | 2 +- dlls/dinput8/tests/hid.c | 360 +++++++++++++++++++++++++++++------------ 2 files changed, 262 insertions(+), 100 deletions(-) Diff:
https://source.winehq.org/git/wine.git/?a=commitdiff;h=95fca9198b2c7791bebd…
1
0
0
0
Rémi Bernon : dinput8/tests: Make test_device_input tests more predictable.
by Alexandre Julliard
10 Nov '21
10 Nov '21
Module: wine Branch: master Commit: 352b5b188e743088c4e642dbdda95275fc54500f URL:
https://source.winehq.org/git/wine.git/?a=commit;h=352b5b188e743088c4e642db…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Wed Nov 10 10:52:22 2021 +0100 dinput8/tests: Make test_device_input tests more predictable. Using a notification event to wait for input, addressing spurious failures or timeouts. Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dinput8/tests/device.c | 97 ++++++++++++++++++++++++++++++--------------- 1 file changed, 65 insertions(+), 32 deletions(-) diff --git a/dlls/dinput8/tests/device.c b/dlls/dinput8/tests/device.c index 3cad4ce256c..5ae9e225dc9 100644 --- a/dlls/dinput8/tests/device.c +++ b/dlls/dinput8/tests/device.c @@ -90,67 +90,100 @@ static void flush_events(void) } } -static void test_device_input(IDirectInputDevice8A *lpdid, DWORD event_type, DWORD event, UINT_PTR expected) +static void test_device_input( IDirectInputDevice8A *device, DWORD type, DWORD code, UINT_PTR expected ) { HRESULT hr; DIDEVICEOBJECTDATA obj_data; - DWORD data_size = 1; + DWORD res, data_size = 1; + HANDLE event; int i; - hr = IDirectInputDevice8_Acquire(lpdid); - ok (SUCCEEDED(hr), "Failed to acquire device hr=%08x\n", hr); + event = CreateEventW( NULL, FALSE, FALSE, NULL ); + ok( event != NULL, "CreateEventW failed, error %u\n", GetLastError() ); - if (event_type == INPUT_KEYBOARD) - keybd_event(0, event, KEYEVENTF_SCANCODE, 0); + IDirectInputDevice_Unacquire( device ); - if (event_type == INPUT_MOUSE) - mouse_event( event, 0, 0, 0, 0); + hr = IDirectInputDevice8_SetEventNotification( device, event ); + ok( hr == DI_OK, "SetEventNotification returned %#x\n", hr ); - flush_events(); - IDirectInputDevice8_Poll(lpdid); - hr = IDirectInputDevice8_GetDeviceData(lpdid, sizeof(obj_data), &obj_data, &data_size, 0); + hr = IDirectInputDevice8_Acquire( device ); + ok( hr == DI_OK, "Acquire returned %#x\n", hr ); - if (data_size != 1) + if (type == INPUT_KEYBOARD) { - win_skip("We're not able to inject input into Windows dinput8 with events\n"); - IDirectInputDevice_Unacquire(lpdid); - return; + keybd_event( 0, code, KEYEVENTF_SCANCODE, 0 ); + res = WaitForSingleObject( event, 100 ); + ok( res == WAIT_OBJECT_0, "WaitForSingleObject returned %#x\n", res ); + + keybd_event( 0, code, KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP, 0 ); + res = WaitForSingleObject( event, 100 ); + ok( res == WAIT_OBJECT_0, "WaitForSingleObject returned %#x\n", res ); + } + if (type == INPUT_MOUSE) + { + mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 ); + res = WaitForSingleObject( event, 100 ); + ok( res == WAIT_OBJECT_0, "WaitForSingleObject returned %#x\n", res ); + + mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ); + res = WaitForSingleObject( event, 100 ); + ok( res == WAIT_OBJECT_0, "WaitForSingleObject returned %#x\n", res ); } - ok (obj_data.uAppData == expected, "Retrieval of action failed uAppData=%lu expected=%lu\n", obj_data.uAppData, expected); + hr = IDirectInputDevice8_GetDeviceData( device, sizeof(obj_data), &obj_data, &data_size, 0 ); + ok( hr == DI_OK, "GetDeviceData returned %#x\n", hr ); + ok( data_size == 1, "got data size %u, expected 1\n", data_size ); + ok( obj_data.uAppData == expected, "got action uAppData %p, expected %p\n", + (void *)obj_data.uAppData, (void *)expected ); /* Check for buffer overflow */ for (i = 0; i < 17; i++) - if (event_type == INPUT_KEYBOARD) + { + if (type == INPUT_KEYBOARD) { - keybd_event( VK_SPACE, DIK_SPACE, 0, 0); - keybd_event( VK_SPACE, DIK_SPACE, KEYEVENTF_KEYUP, 0); + keybd_event( VK_SPACE, DIK_SPACE, 0, 0 ); + res = WaitForSingleObject( event, 100 ); + ok( res == WAIT_OBJECT_0, "WaitForSingleObject returned %#x\n", res ); + + keybd_event( VK_SPACE, DIK_SPACE, KEYEVENTF_KEYUP, 0 ); + res = WaitForSingleObject( event, 100 ); + ok( res == WAIT_OBJECT_0, "WaitForSingleObject returned %#x\n", res ); } - else if (event_type == INPUT_MOUSE) + if (type == INPUT_MOUSE) { - mouse_event(MOUSEEVENTF_LEFTDOWN, 1, 1, 0, 0); - mouse_event(MOUSEEVENTF_LEFTUP, 1, 1, 0, 0); - } + mouse_event( MOUSEEVENTF_LEFTDOWN, 1, 1, 0, 0 ); + res = WaitForSingleObject( event, 100 ); + ok( res == WAIT_OBJECT_0, "WaitForSingleObject returned %#x\n", res ); - flush_events(); - IDirectInputDevice8_Poll(lpdid); + mouse_event( MOUSEEVENTF_LEFTUP, 1, 1, 0, 0 ); + res = WaitForSingleObject( event, 100 ); + ok( res == WAIT_OBJECT_0, "WaitForSingleObject returned %#x\n", res ); + } + } data_size = 1; - hr = IDirectInputDevice8_GetDeviceData(lpdid, sizeof(obj_data), &obj_data, &data_size, 0); - ok(hr == DI_BUFFEROVERFLOW, "GetDeviceData() failed: %08x\n", hr); + hr = IDirectInputDevice8_GetDeviceData( device, sizeof(obj_data), &obj_data, &data_size, 0 ); + ok( hr == DI_BUFFEROVERFLOW, "GetDeviceData returned %#x\n", hr ); data_size = 1; - hr = IDirectInputDevice8_GetDeviceData(lpdid, sizeof(obj_data), &obj_data, &data_size, 0); - ok(hr == DI_OK && data_size == 1, "GetDeviceData() failed: %08x cnt:%d\n", hr, data_size); + hr = IDirectInputDevice8_GetDeviceData( device, sizeof(obj_data), &obj_data, &data_size, 0 ); + ok( hr == DI_OK, "GetDeviceData returned %#x\n", hr ); + ok( data_size == 1, "got data_size %u, expected 1\n", data_size ); /* drain device's queue */ while (data_size == 1) { - hr = IDirectInputDevice8_GetDeviceData(lpdid, sizeof(obj_data), &obj_data, &data_size, 0); - ok(hr == DI_OK, "GetDeviceData() failed: %08x cnt:%d\n", hr, data_size); + hr = IDirectInputDevice8_GetDeviceData( device, sizeof(obj_data), &obj_data, &data_size, 0 ); + ok( hr == DI_OK, "GetDeviceData returned %#x\n", hr ); if (hr != DI_OK) break; } - IDirectInputDevice_Unacquire(lpdid); + hr = IDirectInputDevice_Unacquire( device ); + ok( hr == DI_OK, "Unacquire returned %#x\n", hr ); + + hr = IDirectInputDevice8_SetEventNotification( device, NULL ); + ok( hr == DI_OK, "SetEventNotification returned %#x\n", hr ); + + CloseHandle( event ); } static void test_build_action_map(IDirectInputDevice8A *lpdid, DIACTIONFORMATA *lpdiaf,
1
0
0
0
Zebediah Figura : wmvcore/tests: Add tests for stream selection.
by Alexandre Julliard
10 Nov '21
10 Nov '21
Module: wine Branch: master Commit: f4b3eb7efbe1d433d7dcf850430f99f0f0066347 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=f4b3eb7efbe1d433d7dcf850…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Wed Nov 10 10:41:13 2021 -0600 wmvcore/tests: Add tests for stream selection. Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/wmvcore/tests/wmvcore.c | 236 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 234 insertions(+), 2 deletions(-) Diff:
https://source.winehq.org/git/wine.git/?a=commitdiff;h=f4b3eb7efbe1d433d7dc…
1
0
0
0
Zebediah Figura : winegstreamer: Implement IWMReaderAdvanced::GetStreamSelected().
by Alexandre Julliard
10 Nov '21
10 Nov '21
Module: wine Branch: master Commit: 72b3cb68a702284122a16cbcdd87a621c29bb7a8 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=72b3cb68a702284122a16cbc…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Wed Nov 10 10:41:12 2021 -0600 winegstreamer: Implement IWMReaderAdvanced::GetStreamSelected(). Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/winegstreamer/wm_asyncreader.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index ced02d454a2..35ed8221aa0 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -457,12 +457,14 @@ static HRESULT WINAPI WMReaderAdvanced_SetStreamsSelected(IWMReaderAdvanced6 *if return wm_reader_set_streams_selected(&reader->reader, count, stream_numbers, selections); } -static HRESULT WINAPI WMReaderAdvanced_GetStreamSelected(IWMReaderAdvanced6 *iface, WORD stream_num, - WMT_STREAM_SELECTION *selection) +static HRESULT WINAPI WMReaderAdvanced_GetStreamSelected(IWMReaderAdvanced6 *iface, + WORD stream_number, WMT_STREAM_SELECTION *selection) { - struct async_reader *This = impl_from_IWMReaderAdvanced6(iface); - FIXME("(%p)->(%d %p)\n", This, stream_num, selection); - return E_NOTIMPL; + struct async_reader *reader = impl_from_IWMReaderAdvanced6(iface); + + TRACE("reader %p, stream_number %u, selection %p.\n", reader, stream_number, selection); + + return wm_reader_get_stream_selection(&reader->reader, stream_number, selection); } static HRESULT WINAPI WMReaderAdvanced_SetReceiveSelectionCallbacks(IWMReaderAdvanced6 *iface, BOOL get_callbacks)
1
0
0
0
Zebediah Figura : winegstreamer: Implement IWMSyncReader::GetStreamSelected().
by Alexandre Julliard
10 Nov '21
10 Nov '21
Module: wine Branch: master Commit: a1a51f54dcb3863f9accfbf8c261407794d2bd13 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=a1a51f54dcb3863f9accfbf8…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Wed Nov 10 10:41:11 2021 -0600 winegstreamer: Implement IWMSyncReader::GetStreamSelected(). Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/winegstreamer/gst_private.h | 2 ++ dlls/winegstreamer/wm_reader.c | 19 +++++++++++++++++++ dlls/winegstreamer/wm_syncreader.c | 11 +++++++---- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index c7c72ab65fc..e1dec7b755c 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -168,6 +168,8 @@ struct wm_stream *wm_reader_get_stream_by_stream_number(struct wm_reader *reader WORD stream_number); HRESULT wm_reader_get_stream_sample(struct wm_stream *stream, INSSBuffer **sample, QWORD *pts, QWORD *duration, DWORD *flags); +HRESULT wm_reader_get_stream_selection(struct wm_reader *reader, + WORD stream_number, WMT_STREAM_SELECTION *selection); void wm_reader_init(struct wm_reader *reader, const struct wm_reader_ops *ops); HRESULT wm_reader_open_file(struct wm_reader *reader, const WCHAR *filename); HRESULT wm_reader_open_stream(struct wm_reader *reader, IStream *stream); diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index 6b29415e363..0e0c639d504 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1872,6 +1872,25 @@ HRESULT wm_reader_set_streams_selected(struct wm_reader *reader, WORD count, return S_OK; } +HRESULT wm_reader_get_stream_selection(struct wm_reader *reader, + WORD stream_number, WMT_STREAM_SELECTION *selection) +{ + struct wm_stream *stream; + + EnterCriticalSection(&reader->cs); + + if (!(stream = wm_reader_get_stream_by_stream_number(reader, stream_number))) + { + LeaveCriticalSection(&reader->cs); + return E_INVALIDARG; + } + + *selection = stream->selection; + + LeaveCriticalSection(&reader->cs); + return S_OK; +} + void wm_reader_init(struct wm_reader *reader, const struct wm_reader_ops *ops) { reader->IWMHeaderInfo3_iface.lpVtbl = &header_info_vtbl; diff --git a/dlls/winegstreamer/wm_syncreader.c b/dlls/winegstreamer/wm_syncreader.c index 3e980c59601..73bbf18898f 100644 --- a/dlls/winegstreamer/wm_syncreader.c +++ b/dlls/winegstreamer/wm_syncreader.c @@ -221,11 +221,14 @@ static HRESULT WINAPI WMSyncReader_GetStreamNumberForOutput(IWMSyncReader2 *ifac return S_OK; } -static HRESULT WINAPI WMSyncReader_GetStreamSelected(IWMSyncReader2 *iface, WORD stream_num, WMT_STREAM_SELECTION *selection) +static HRESULT WINAPI WMSyncReader_GetStreamSelected(IWMSyncReader2 *iface, + WORD stream_number, WMT_STREAM_SELECTION *selection) { - struct sync_reader *This = impl_from_IWMSyncReader2(iface); - FIXME("(%p)->(%d %p): stub!\n", This, stream_num, selection); - return E_NOTIMPL; + struct sync_reader *reader = impl_from_IWMSyncReader2(iface); + + TRACE("reader %p, stream_number %u, selection %p.\n", reader, stream_number, selection); + + return wm_reader_get_stream_selection(&reader->reader, stream_number, selection); } static HRESULT WINAPI WMSyncReader_Open(IWMSyncReader2 *iface, const WCHAR *filename)
1
0
0
0
Zebediah Figura : winegstreamer: Implement IWMReaderAdvanced::SetStreamsSelected().
by Alexandre Julliard
10 Nov '21
10 Nov '21
Module: wine Branch: master Commit: 3e0a9877eafef1f484987126cd453cc36cfdeb42 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=3e0a9877eafef1f484987126…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Wed Nov 10 10:41:10 2021 -0600 winegstreamer: Implement IWMReaderAdvanced::SetStreamsSelected(). Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/winegstreamer/wm_asyncreader.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index b7b96c8b884..ced02d454a2 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -85,7 +85,12 @@ static DWORD WINAPI stream_thread(void *arg) for (i = 0; i < stream_count; ++i) { - hr = wm_reader_get_stream_sample(&reader->reader.streams[i], &sample, &pts, &duration, &flags); + struct wm_stream *stream = &reader->reader.streams[i]; + + if (stream->selection == WMT_OFF) + continue; + + hr = wm_reader_get_stream_sample(stream, &sample, &pts, &duration, &flags); if (hr == S_OK) { if (reader->user_clock) @@ -441,12 +446,15 @@ static HRESULT WINAPI WMReaderAdvanced_GetManualStreamSelection(IWMReaderAdvance return E_NOTIMPL; } -static HRESULT WINAPI WMReaderAdvanced_SetStreamsSelected(IWMReaderAdvanced6 *iface, WORD stream_count, - WORD *stream_numbers, WMT_STREAM_SELECTION *selections) +static HRESULT WINAPI WMReaderAdvanced_SetStreamsSelected(IWMReaderAdvanced6 *iface, + WORD count, WORD *stream_numbers, WMT_STREAM_SELECTION *selections) { - struct async_reader *This = impl_from_IWMReaderAdvanced6(iface); - FIXME("(%p)->(%d %p %p)\n", This, stream_count, stream_numbers, selections); - return E_NOTIMPL; + struct async_reader *reader = impl_from_IWMReaderAdvanced6(iface); + + TRACE("reader %p, count %u, stream_numbers %p, selections %p.\n", + reader, count, stream_numbers, selections); + + return wm_reader_set_streams_selected(&reader->reader, count, stream_numbers, selections); } static HRESULT WINAPI WMReaderAdvanced_GetStreamSelected(IWMReaderAdvanced6 *iface, WORD stream_num,
1
0
0
0
Zebediah Figura : winegstreamer: Implement IWMSyncReader::SetStreamsSelected().
by Alexandre Julliard
10 Nov '21
10 Nov '21
Module: wine Branch: master Commit: 5d0858ee9887ef5b99e09912d4379880979ab974 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=5d0858ee9887ef5b99e09912…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Wed Nov 10 10:41:09 2021 -0600 winegstreamer: Implement IWMSyncReader::SetStreamsSelected(). Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/winegstreamer/gst_private.h | 3 +++ dlls/winegstreamer/wm_reader.c | 48 ++++++++++++++++++++++++++++++++++++++ dlls/winegstreamer/wm_syncreader.c | 21 +++++++++++------ 3 files changed, 65 insertions(+), 7 deletions(-) diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 9674ee35052..c7c72ab65fc 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -123,6 +123,7 @@ struct wm_stream WORD index; bool eos; struct wg_format format; + WMT_STREAM_SELECTION selection; }; struct wm_reader @@ -173,5 +174,7 @@ HRESULT wm_reader_open_stream(struct wm_reader *reader, IStream *stream); void wm_reader_seek(struct wm_reader *reader, QWORD start, LONGLONG duration); HRESULT wm_reader_set_output_props(struct wm_reader *reader, DWORD output, IWMOutputMediaProps *props); +HRESULT wm_reader_set_streams_selected(struct wm_reader *reader, WORD count, + const WORD *stream_numbers, const WMT_STREAM_SELECTION *selections); #endif /* __GST_PRIVATE_INCLUDED__ */ diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index bcae50e5d1e..6b29415e363 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1413,6 +1413,7 @@ static HRESULT init_stream(struct wm_reader *reader, QWORD file_size) stream->wg_stream = wg_parser_get_stream(reader->wg_parser, i); stream->reader = reader; stream->index = i; + stream->selection = WMT_ON; wg_parser_stream_get_preferred_format(stream->wg_stream, &stream->format); if (stream->format.major_type == WG_MAJOR_TYPE_AUDIO) { @@ -1739,6 +1740,9 @@ HRESULT wm_reader_get_stream_sample(struct wm_stream *stream, struct wg_parser_event event; struct buffer *object; + if (stream->selection == WMT_OFF) + return NS_E_INVALID_REQUEST; + if (stream->eos) return NS_E_NO_MORE_SAMPLES; @@ -1824,6 +1828,50 @@ void wm_reader_seek(struct wm_reader *reader, QWORD start, LONGLONG duration) LeaveCriticalSection(&reader->cs); } +HRESULT wm_reader_set_streams_selected(struct wm_reader *reader, WORD count, + const WORD *stream_numbers, const WMT_STREAM_SELECTION *selections) +{ + struct wm_stream *stream; + WORD i; + + if (!count) + return E_INVALIDARG; + + EnterCriticalSection(&reader->cs); + + for (i = 0; i < count; ++i) + { + if (!(stream = wm_reader_get_stream_by_stream_number(reader, stream_numbers[i]))) + { + LeaveCriticalSection(&reader->cs); + WARN("Invalid stream number %u; returning NS_E_INVALID_REQUEST.\n", stream_numbers[i]); + return NS_E_INVALID_REQUEST; + } + } + + for (i = 0; i < count; ++i) + { + stream = wm_reader_get_stream_by_stream_number(reader, stream_numbers[i]); + stream->selection = selections[i]; + if (selections[i] == WMT_OFF) + { + TRACE("Disabling stream %u.\n", stream_numbers[i]); + wg_parser_stream_disable(stream->wg_stream); + } + else if (selections[i] == WMT_ON) + { + if (selections[i] != WMT_ON) + FIXME("Ignoring selection %#x for stream %u; treating as enabled.\n", + selections[i], stream_numbers[i]); + TRACE("Enabling stream %u.\n", stream_numbers[i]); + wg_parser_stream_enable(stream->wg_stream, &stream->format); + } + } + + LeaveCriticalSection(&reader->cs); + return S_OK; +} + void wm_reader_init(struct wm_reader *reader, const struct wm_reader_ops *ops) { reader->IWMHeaderInfo3_iface.lpVtbl = &header_info_vtbl; diff --git a/dlls/winegstreamer/wm_syncreader.c b/dlls/winegstreamer/wm_syncreader.c index fff048df06e..3e980c59601 100644 --- a/dlls/winegstreamer/wm_syncreader.c +++ b/dlls/winegstreamer/wm_syncreader.c @@ -83,8 +83,8 @@ static HRESULT WINAPI WMSyncReader_GetNextSample(IWMSyncReader2 *iface, DWORD *flags, DWORD *output_number, WORD *ret_stream_number) { struct sync_reader *reader = impl_from_IWMSyncReader2(iface); + HRESULT hr = NS_E_NO_MORE_SAMPLES; struct wm_stream *stream; - HRESULT hr; WORD i; TRACE("reader %p, stream_number %u, sample %p, pts %p, duration %p," @@ -104,8 +104,12 @@ static HRESULT WINAPI WMSyncReader_GetNextSample(IWMSyncReader2 *iface, for (i = 0; i < reader->reader.stream_count; ++i) { WORD index = (i + reader->last_read_stream + 1) % reader->reader.stream_count; + struct wm_stream *stream = &reader->reader.streams[index]; - hr = wm_reader_get_stream_sample(&reader->reader.streams[index], sample, pts, duration, flags); + if (stream->selection == WMT_OFF) + continue; + + hr = wm_reader_get_stream_sample(stream, sample, pts, duration, flags); if (hr == S_OK) { if (output_number) @@ -296,12 +300,15 @@ static HRESULT WINAPI WMSyncReader_SetReadStreamSamples(IWMSyncReader2 *iface, W return E_NOTIMPL; } -static HRESULT WINAPI WMSyncReader_SetStreamsSelected(IWMSyncReader2 *iface, WORD stream_count, - WORD *stream_numbers, WMT_STREAM_SELECTION *selections) +static HRESULT WINAPI WMSyncReader_SetStreamsSelected(IWMSyncReader2 *iface, + WORD count, WORD *stream_numbers, WMT_STREAM_SELECTION *selections) { - struct sync_reader *This = impl_from_IWMSyncReader2(iface); - FIXME("(%p)->(%d %p %p): stub!\n", This, stream_count, stream_numbers, selections); - return S_OK; + struct sync_reader *reader = impl_from_IWMSyncReader2(iface); + + TRACE("reader %p, count %u, stream_numbers %p, selections %p.\n", + reader, count, stream_numbers, selections); + + return wm_reader_set_streams_selected(&reader->reader, count, stream_numbers, selections); } static HRESULT WINAPI WMSyncReader2_SetRangeByTimecode(IWMSyncReader2 *iface, WORD stream_num,
1
0
0
0
← Newer
1
...
57
58
59
60
61
62
63
...
96
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
Results per page:
10
25
50
100
200