On Thu Apr 17 07:54:50 2025 +0000, Rémi Bernon wrote:
> Have you tried GstVideoTimeCodeMeta / do you know what it does?
No, I didn't look at that. But taking a look now, it looks like it might be good for Video PTS/DTS, but wouldn't work for audio. I'm not sure for duration either.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7623#note_101244
On Wed Apr 16 08:20:27 2025 +0000, Brendan McGrath wrote:
> Oops (again). I just tried using the `preserve_timestamps` boolean and
> it doesn't work. The `timestamp/x-wg-transform` is a flag that lets
> `video_decoder.c` know that an input timestamp has been provided (and
> that it should use it). It will otherwise fall back to the behavior
> defined by `provide_timestamps`.
> But if we want to get rid of the need for the GUID, I guess we could
> move the existing logic in `video_decoder.c` (for generating our own
> timestamp) in to `wg_transform.c`.
Hmm, I'm not sure that moving timestamp generation to the unix side is better. Can't we simply fill the sample timestamps from the input provided timestamps instead of the GStreamer-generated timestamps we don't really care about?
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7623#note_101242
On Wed Apr 16 01:09:24 2025 +0000, Brendan McGrath wrote:
> On well formed media, that `dts < 0` should only ever be true once (as
> after adding ts_offset, we should never get a value below 0 again). It's
> mainly there in case we get media with malformed timestamps (and dts
> goes backwards).
IMO the offset should only be updated once, and there should be a check and warning/fixme message if that assumption is broken.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7623#note_101241
On Wed Apr 16 01:06:36 2025 +0000, Brendan McGrath wrote:
> Good question. Unfortunately I must admit to not being an expert on
> that. Obviously it seems to decode fine without it, so it may be more
> useful for muxing than decoding. Although, the only codec with B-Frames
> that I've tested is H.264; maybe there's another codec that's more
> dependent on it. But I'll experiment and see if I can discern any
> difference between its inclusion vs. exclusion.
Testing H.264 decoding, I've been unable to discern any difference. I only tested with a small sample of videos, but it seems to work both with and without and with no notable difference in performance.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7623#note_101239
If CompAttr and CompClause are properly configured, Japanese input
will be more comfortable.
Inspired by cursor_begin and cursor_end from Wayland zwp_text_input_v3::
preedit_string, I extended the cursor_pos concept as follows:
cursor_pos = MAKELONG( cursor_begin, cursor_end );
ime_to_tascii_ex() uses this to construct CompAttr, CompClause.
MS Windows native CompAttr, CompClause is a bit more complicated
than this, but the concept is useful enough.
It requires additional implementation in the Wine ime_ui_window proc and
richedit control. However, it is useful for applications that inline ime
composition string.
This can be tested with MS Office Word, Excel. LANG=ja_JP.UTF-8 wine EXCEL.EXE
Test key sequences:
- “n-i-h-o-n-g-o-n-o-m-o-j-i-d-e-s-u-.-SPACE”.
- And, RIGHT, LEFT, Shift+LEFT, Shift+RIGHT, ESC, SPACE, etc.
--
v5: winex11: Update only when caret pos changed in xic_preedit_caret.
winex11: Extend cursor_pos using cursor_begin, cursor_end.
winemac: Extend cursor_pos using cursor_begin, cursor_end.
winewayland: Extend cursor_pos using cursor_begin, cursor_end.
win32u: Add more CompAttr, CompClause implementation using cursor_begin, cursor_end concept.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7812
This patch fixes a Japanese input issue in MS Office Visual Basic and Mery text
editor ime inline mode. The following was considered:
1. Japanese ime: the result string message is always placed between
WM_IME_STARTCOMPOSITION and WM_IME_ENDCOMPOSITION. Currently in Wine,
the result string message follows WM_IME_ENDCOMPOSITION.
dlls/imm32/tests/imm32.c::test_nihongo_no().
2. Chinese ime: same as Japanese ime.
3. Korean ime: mostly the same, but there are some cases where it is not
(e.g. CPS_COMPLETE, 'r-k-RETURN'). However, I haven't found any problem
even if it behave like Japanese ime message order.
3. zero-length preedit string: as in MR !3115 commit d1f9aae, the message
followed by WM_IME_ENDCOMPOSITION. Currently in Wine, it is associated
with WM_IME_STARTCOMPOSITION.
4. zero-length result string: ignore.
--
v3: winewayland: Use an empty string to clear the composition string.
imm32: Fix the WM_IME_COMPOSITION messages to be between the WM_IME_{START|END}COMPOSITION message.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7827
I wasn't able to find the bug report, but this is needed to fix a hang in an application that draws an absurdly large ellipse. I was able to replicate that situation with a test program, and I verified that this fixes it.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7840
This patch fixes a Japanese input issue in MS Office Visual Basic and Mery text
editor ime inline mode. The following was considered:
1. Japanese ime: the result string message is always placed between
WM_IME_STARTCOMPOSITION and WM_IME_ENDCOMPOSITION. Currently in Wine,
the result string message follows WM_IME_ENDCOMPOSITION.
dlls/imm32/tests/imm32.c::test_nihongo_no().
2. Chinese ime: same as Japanese ime.
3. Korean ime: mostly the same, but there are some cases where it is not
(e.g. CPS_COMPLETE, 'r-k-RETURN'). However, I haven't found any problem
even if it behave like Japanese ime message order.
3. zero-length preedit string: as in MR !3115 commit d1f9aae, the message
followed by WM_IME_ENDCOMPOSITION. Currently in Wine, it is associated
with WM_IME_STARTCOMPOSITION.
4. zero-length result string: ignore.
--
v2: imm32: Fix the WM_IME_COMPOSITION messages to be between the WM_IME_{START|END}COMPOSITION message.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7827
If CompAttr and CompClause are properly configured, Japanese input
will be more comfortable.
Inspired by cursor_begin and cursor_end from Wayland zwp_text_input_v3::
preedit_string, I extended the cursor_pos concept as follows:
cursor_pos = MAKELONG( cursor_begin, cursor_end );
ime_to_tascii_ex() uses this to construct CompAttr, CompClause.
MS Windows native CompAttr, CompClause is a bit more complicated
than this, but the concept is useful enough.
It requires additional implementation in the Wine ime_ui_window proc and
richedit control. However, it is useful for applications that inline ime
composition string.
This can be tested with MS Office Word, Excel. LANG=ja_JP.UTF-8 wine EXCEL.EXE
Test key sequences:
- “n-i-h-o-n-g-o-n-o-m-o-j-i-d-e-s-u-.-SPACE”.
- And, RIGHT, LEFT, Shift+LEFT, Shift+RIGHT, ESC, SPACE, etc.
--
v4: winex11: Update only when caret pos changed in xic_preedit_caret.
winex11: Extend cursor_pos using cursor_begin, cursor_end.
winemac: Extend cursor_pos using cursor_begin, cursor_end.
winewayland: Extend cursor_pos using cursor_begin, cursor_end.
win32u: Add more CompAttr, CompClause implementation using cursor_begin, cursor_end concept.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7812
This patch fixes a Japanese input issue in MS Office Visual Basic and Mery text
editor ime inline mode. The following was considered:
1. Japanese ime: the result string message is always placed between
WM_IME_STARTCOMPOSITION and WM_IME_ENDCOMPOSITION. Currently in Wine,
the result string message follows WM_IME_ENDCOMPOSITION.
dlls/imm32/tests/imm32.c::test_nihongo_no().
2. Chinese ime: same as Japanese ime.
3. Korean ime: mostly the same, but there are some cases where it is not
(e.g. CPS_COMPLETE, 'r-k-RETURN'). However, I haven't found any problem
even if it behave like Japanese ime message order.
3. zero-length preedit string: as in MR !3115 commit d1f9aae, the message
followed by WM_IME_ENDCOMPOSITION. Currently in Wine, it is associated
with WM_IME_STARTCOMPOSITION.
4. zero-length result string: ignore.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7827
On Wed Apr 16 01:25:38 2025 +0000, Brendan McGrath wrote:
> Oops - sorry. I got the GUID mixed up with `timestamp/x-wg-transform`.
> The GUID might not be necessary actually. I might be able to use the
> `preserve_timestamps` boolean instead. I think the only difference would
> be that if GStreamer lost the `timestamp/x-wg-transform` state, we would
> fall back to using the gstreamer values. Which is possibly better.
Oops (again). I just tried using the `preserve_timestamps` boolean and it doesn't work. The `timestamp/x-wg-transform` is a flag that lets `video_decoder.c` know that an input timestamp has been provided (and that it should use it). It will otherwise fall back to the behavior defined by `provide_timestamps`.
But if we want to get rid of the need for the GUID, I guess we could move the existing logic in `video_decoder.c` (for generating our own timestamp) in to `wg_transform.c`.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7623#note_101018
--
v5: amstream: Implement dynamic formats in ddraw stream.
amstream/tests: Test for dynamic formats in ddraw stream.
amstream: Implement custom allocator for ddraw stream.
amstream/tests: Test for custom allocator in ddraw stream.
amstream: Release allocator when Disconnect is called in ddraw stream.
amstream: Implement IMemAllocator stub for ddraw stream.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7715
On Wed Apr 16 00:56:58 2025 +0000, Brendan McGrath wrote:
> I'll just add, that the state I'm referring to is the sample PTS. On
> Windows, the application can provide any arbitrary value and when the
> decoder produces the output, it needs to preserve the provided value.
Oops - sorry. I got the GUID mixed up with `timestamp/x-wg-transform`.
The GUID might not be necessary actually. I might be able to use the `preserve_timestamps` boolean instead. I think the only difference would be that if GStreamer lost the `timestamp/x-wg-transform` state, we would fall back to using the gstreamer values. Which is possibly better.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7623#note_100994
On Tue Apr 15 22:44:37 2025 +0000, Rémi Bernon wrote:
> Updating the offset continuously feels weird, though I've only skimmed
> over the code for now.
On well formed media, that `dts < 0` should only ever be true once (as after adding ts_offset, we should never get a value below 0 again). It's mainly there in case we get media with malformed timestamps (and dts goes backwards).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7623#note_100993
On Tue Apr 15 22:44:37 2025 +0000, Rémi Bernon wrote:
> How useful are DTS? Do we really need to pass them through?
Good question. Unfortunately I must admit to not being an expert on that. Obviously it seems to decode fine without it, so it may be more useful for muxing than decoding. Although, the only codec with B-Frames that I've tested is H.264; maybe there's another codec that's more dependent on it. But I'll experiment and see if I can discern any difference between its inclusion vs. exclusion.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7623#note_100992
On Wed Apr 16 00:55:35 2025 +0000, Brendan McGrath wrote:
> Because we can receive samples in a different order to what was sent
> (for example, on B-Frames), I was thinking only GStreamer can preserve
> state from input to output. But please correct me if I'm wrong.
I'll just add, that the state I'm referring to is the sample PTS. On Windows, the application can provide any arbitrary value and when the decoder produces the output, it needs to preserve the provided value.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7623#note_100991
On Tue Apr 15 22:44:37 2025 +0000, Rémi Bernon wrote:
> Do we really need this custom GUID? Can't the fixups be confined on the
> unix side only?
Because we can receive samples in a different order to what was sent (for example, on B-Frames), I was thinking only GStreamer can preserve state from input to output. But please correct me if I'm wrong.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7623#note_100990
On Tue Apr 15 22:51:55 2025 +0000, Alfred Agrell wrote:
> No, it's not. The first three bytes (in text form) are the same, but the
> other 13 bytes don't look like anything.
Ugh. I don't know how that happened.
It does make SteamVR happy, though.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7706#note_100986
On Tue Apr 15 22:51:55 2025 +0000, Robert Lippmann wrote:
> It is defined in winnt.h as GUID_MIN_POWER_SAVINGS.
> Unfortunately, if I put those DEFINE_GUID statements into winnt.h, it
> breaks compilation of other modules.
> ```
> //
> // =========================================
> // Define GUIDs which represent well-known power schemes
> // =========================================
> //
> //
> // Maximum Power Savings - indicates that very aggressive power savings
> measures will be used to help
> // stretch battery life.
> //
> // {a1841308-3541-4fab-bc81-f71556f20b4a}
> //
> DEFINE_GUID( GUID_MAX_POWER_SAVINGS, 0xA1841308, 0x3541, 0x4FAB, 0xBC,
> 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A );
> //
> // No Power Savings - indicates that almost no power savings measures
> will be used.
> //
> // {8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c}
> //
> DEFINE_GUID( GUID_MIN_POWER_SAVINGS, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A,
> 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C );
> //
> // Typical Power Savings - indicates that fairly aggressive power
> savings measures will be used.
> //
> // {381b4222-f694-41f0-9685-ff5bb260df2e}
> //
> DEFINE_GUID( GUID_TYPICAL_POWER_SAVINGS, 0x381B4222, 0xF694, 0x41F0,
> 0x96, 0x85, 0xFF, 0x5B, 0xB2, 0x60, 0xDF, 0x2E );
> ```
No, it's not. The first three bytes (in text form) are the same, but the other 13 bytes don't look like anything.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7706#note_100985
Rémi Bernon (@rbernon) commented about dlls/winegstreamer/wg_transform.c:
> buffer_add_video_meta(buffer, &video_info);
> }
>
> + /* we perform DTS first as it should never be later than PTS, so any required timestamp offset should be the maximum here */
> + if (sample->flags & WG_SAMPLE_FLAG_HAS_DTS)
> + {
> + dts = sample->dts += transform->ts_offset;
> + if (dts < 0)
> + {
> + transform->ts_offset -= dts;
Updating the offset continuously feels weird, though I've only skimmed over the code for now.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7623#note_100983
It is defined in winnt.h as GUID_MIN_POWER_SAVINGS.
Unfortunately, if I put those DEFINE_GUID statements into winnt.h, it breaks compilation of other modules.
```
//
// =========================================
// Define GUIDs which represent well-known power schemes
// =========================================
//
//
// Maximum Power Savings - indicates that very aggressive power savings measures will be used to help
// stretch battery life.
//
// {a1841308-3541-4fab-bc81-f71556f20b4a}
//
DEFINE_GUID( GUID_MAX_POWER_SAVINGS, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A );
//
// No Power Savings - indicates that almost no power savings measures will be used.
//
// {8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c}
//
DEFINE_GUID( GUID_MIN_POWER_SAVINGS, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C );
//
// Typical Power Savings - indicates that fairly aggressive power savings measures will be used.
//
// {381b4222-f694-41f0-9685-ff5bb260df2e}
//
DEFINE_GUID( GUID_TYPICAL_POWER_SAVINGS, 0x381B4222, 0xF694, 0x41F0, 0x96, 0x85, 0xFF, 0x5B, 0xB2, 0x60, 0xDF, 0x2E );
```
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7706#note_100980
--
v2: Release 9.0.1.
wbemprox: Use separate critical sections for tables and table list.
kernel32/tests: Add tests for critical section debug info presence.
This merge request has too many patches to be relayed via email.
Please visit the URL below to see the contents of the merge request.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7462
--
v2: d3dx9: Don't color key compressed pixel formats on 32-bit d3dx9.
d3dx9: Fixup color key value in d3dx_load_pixels_from_pixels() if necessary.
d3dx9: Set all color channels to zero when color keying.
d3dx9/tests: Add some color key tests.
d3dx9: Move code for format conversion of a single pixel into a common helper function.
d3dx9: Make functions for pixel copying/conversion/filtering static.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7711
--
v3: mshtml: Move Option constructor to the window rather than the prototype.
mshtml: Move Image constructor to the window rather than the prototype.
mshtml: Validate builtin host functions in IE9+ using prototype_id rather
mshtml: Store the prototype_id of the last member that contains the needed
https://gitlab.winehq.org/wine/wine/-/merge_requests/7779
--
v5: win32u: Add a nulldrv pbuffer stub implementation.
winemac: Use the generic pbuffer implementation.
winewayland: Use the generic pbuffer implementation.
win32u: Introduce a generic pbuffer implementation from winex11.
opengl32/tests: Add more WGL_ARB_render_texture tests.
opengl32/tests: Add more WGL_ARB_pbuffer tests.
opengl32/tests: Avoid leaking contexts.
win32u: Handle some pixel format initialization.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7758
--
v4: win32u: Add a nulldrv pbuffer stub implementation.
winemac: Use the generic pbuffer implementation.
winewayland: Use the generic pbuffer implementation.
win32u: Introduce a generic pbuffer implementation from winex11.
opengl32/tests: Add more WGL_ARB_render_texture tests.
opengl32/tests: Add more WGL_ARB_pbuffer tests.
opengl32/tests: Avoid leaking contexts.
win32u: Handle some pixel format initialization.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7758
This fixes a misbehaving proton game that sets MF_XVP_PLAYBACK_MODE.
MF_XVP_PLAYBACK_MODE isn't mentioned in microsoft docs, but it's explained and used in the MIT-licensed [Windows-classic-samples](https://github.com/microsoft/Windows-classic-sampl…
Not sure if mfplat is the right place to add the tests for this since the code is in winegstreamer, but it's very similar to the existing mfplat tests and the test does not interface with winegstreamer directly.
It should be noted that on windows, ProcessOutput errors out if we provide a pSample with MF_XVP_PLAYBACK_MODE unset, wine simply ignores it.
--
v7: winegstreamer: Allow caller to allocate samples in MF_XVP_PLAYBACK_MODE.
mfplat/tests: Add test for MF_XVP_PLAYBACK_MODE.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7796
This fixes a misbehaving proton game that sets MF_XVP_PLAYBACK_MODE.
MF_XVP_PLAYBACK_MODE isn't mentioned in microsoft docs, but it's explained and used in the MIT-licensed [Windows-classic-samples](https://github.com/microsoft/Windows-classic-sampl…
Not sure if mfplat is the right place to add the tests for this since the code is in winegstreamer, but it's very similar to the existing mfplat tests and the test does not interface with winegstreamer directly.
It should be noted that on windows, ProcessOutput errors out if we provide a pSample with MF_XVP_PLAYBACK_MODE unset, wine simply ignores it.
--
v6: winegstreamer: Allow caller to allocate samples in MF_XVP_PLAYBACK_MODE.
mfplat/tests: Add test for MF_XVP_PLAYBACK_MODE.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7796
If CompStrAttr and CompStrClause are properly configured, Japanese input
will be more comfortable.
Inspired by cursor_begin and cursor_end from Wayland zwp_text_input_v3
preedit_string, I extended the cursor_pos concept as follows:
cursor_pos = MAKELONG( cursor_begin, cursor_end );
ime_to_tascii_ex() uses this to construct CompStrAttr, CompStrClause.
MS Windows native CompStrAttr, CompStrClause is a bit more complicated
than this, but the concept is useful enough.
It requires additional implementation in the Wine ime_ui_window proc and
richedit control. However, it is useful for applications that inline ime
composition string.
This can be tested with MS Office Word, Excel. LANG=ja_JP.UTF-8 wine EXCEL.EXE
Test key sequences:
- “n-i-h-o-n-g-o-n-o-m-o-j-i-d-e-s-u-.-SPACE”.
- And, RIGHT, LEFT, Shift+LEFT, Shift+RIGHT, SPACE, UP, DOWN, ESC, etc.
--
v3: winex11: Update only when caret pos changed in xic_preedit_caret.
winex11: Extend cursor_pos using cursor_begin, cursor_end.
winemac: Extend cursor_pos using cursor_begin, cursor_end.
winewayland: Extend cursor_pos using cursor_begin, cursor_end.
win32u: Add more CompAttr, CompClause implementation using cursor_begin, cursor_end concept.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7812
Follow-up of !2786, which appears to have been abandoned.
--
v17: ws2_32/tests: Add test for AF_UNIX sockets.
server: Fix getsockname() and accept() on AF_UNIX sockets.
server: Introduce error when attempting to create a SOCK_DGRAM AF_UNIX socket.
server: Allow for deletion of socket files.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7650
Ralf Habacker (@rhabacker) commented about server/fd.c:
> set_error( STATUS_OBJECT_NAME_COLLISION );
> goto error;
> }
> ftruncate( fd->unix_fd, 0 );
Here is a direct usage of the `unix_fd`, which may be a problem.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7650#note_100892
On Tue Apr 15 07:50:06 2025 +0000, Ralf Habacker wrote:
> Here the `unix_fd` is saved for closing the file, which is -1 in the
> case of sockets.
`unix_fd` is used in `inode_close_pending()`, `inode_destroy()`, `inode_add_closed_fd()`, `fd_destroy()` and `unmount_fd()` to close the file. In any of the mentioned location the call to close() is guarded with `if (fd->unix_fd != -1)`, so these function are already save the socket case.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7650#note_100886
This fixes a real problem and improves behavior at the same time.
- ~~Fixes: hanging when trying to run Wine built with epoll_pwait2 headers available but epoll_pwait2 is missing in the run-time kernel (i.e. build 5.11->run 5.10)~~ (already fixed.)
- Improvement: bring the improved timeout resolution to Wine builds
which didn't have epoll_pwait2 at compile time, if the run-time kernel supports it
(i.e. build 5.10->run 6.14)
This last point is especially important in my opinion, as it applies to official Proton builds.
Proton is (currently) built in Debian 11 with kernel 5.10, but SteamOS is a moving target with
a much newer kernel version being used to run these Wine builds.
These builds use the lower resolution timeouts if epoll_pwait2 is only checked for at compile-time,
when it can cheaply and easily be done at run-time instead.
~~Fixes: 87ca5db40e2c1b37423bdc25101a5c5e39e67e6f~~
~~An alternative to !7640 that kills two birds with one stone.~~
--
v6: server: Use dlsym() to check for epoll_pwait2 at run-time.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7642
--
v2: shell32: Rework rename_files.
shell32: Don't parse wildcard for rename operation.
shell32: Rework add_file_entry, add more parameters.
shell32/tests: Avoid showing UI when testing.
shell32/tests: Test NULL and empty file name for SHFileOperation.
shell32/tests: Add more tests to test_rename.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7775
I split the implementations into 2 parts to make it looks easier to review. So plz first review this MR and make sure it's good so that we don't have to rebase. The follwing patches is in !7571.
--
v2: mfreadwrite: Implement sink_writer_SetInputMediaType.
mfreadwrite: Implement IMFSinkWriterEx.
mfreadwrite: Add converter transform to stream.
mfreadwrite: Add attributes member to writer struct.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7570
This fixes failure to play the prologue video in Planet of the Apes: Last Frontier, which unpauses by calling Start() with a location. The exact state leading to this issue does not occur in the Start() tests, and it's not clear how to reproduce it reliably.
--
v5: mf: Reset transform nodes when seeking.
mf: Initialise the grabber sample count when setting state after a seek.
mf: Reset transform node outputs when seeking.
mf: Flush nodes before restarting a paused source at a specific position.
mf: Drop transform node input events when unpausing at a specific position.
mf: Reset transforms before restarting a paused source instead of after.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7466