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
Re: [PATCH v2 3/8] mfplat/tests: Test interaction between Lock() and LockRect().
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=116956
Your paranoid android.
=== w7u_adm (32 bit report) ===
mfplat:
0868:mfplat: unhandled exception c0000005 at 6EDF7D1C
=== w8 (32 bit report) ===
mfplat:
mfplat.c:6479: Test failed: Unexpected length 0 instead of 1228800.
mfplat.c:6496: Test failed: Unexpected hr 0x80070057.
mfplat.c:6513: Test failed: Unexpected hr 0x80070057.
mfplat.c:6571: Test failed: Unexpected leading byte.
mfplat.c:6573: Test failed: Unexpected hr 0x80070057.
=== w8adm (32 bit report) ===
mfplat:
mfplat.c:6479: Test failed: Unexpected length 0 instead of 1228800.
mfplat.c:6496: Test failed: Unexpected hr 0x80070057.
mfplat.c:6513: Test failed: Unexpected hr 0x80070057.
mfplat.c:6571: Test failed: Unexpected leading byte.
mfplat.c:6573: Test failed: Unexpected hr 0x80070057.
=== w864 (32 bit report) ===
mfplat:
mfplat.c:6479: Test failed: Unexpected length 0 instead of 1228800.
mfplat.c:6496: Test failed: Unexpected hr 0x80070057.
mfplat.c:6513: Test failed: Unexpected hr 0x80070057.
mfplat.c:6571: Test failed: Unexpected leading byte.
mfplat.c:6573: Test failed: Unexpected hr 0x80070057.
=== w1064v1507 (32 bit report) ===
mfplat:
mfplat.c:6479: Test failed: Unexpected length 0 instead of 1228800.
mfplat.c:6496: Test failed: Unexpected hr 0x80070057.
mfplat.c:6513: Test failed: Unexpected hr 0x80070057.
mfplat.c:6571: Test failed: Unexpected leading byte.
mfplat.c:6573: Test failed: Unexpected hr 0x80070057.
=== w864 (64 bit report) ===
mfplat:
mfplat.c:6479: Test failed: Unexpected length 0 instead of 1228800.
mfplat.c:6496: Test failed: Unexpected hr 0x80070057.
mfplat.c:6513: Test failed: Unexpected hr 0x80070057.
mfplat.c:6571: Test failed: Unexpected leading byte.
mfplat.c:6573: Test failed: Unexpected hr 0x80070057.
=== w1064v1507 (64 bit report) ===
mfplat:
mfplat.c:6479: Test failed: Unexpected length 0 instead of 1228800.
mfplat.c:6496: Test failed: Unexpected hr 0x80070057.
mfplat.c:6513: Test failed: Unexpected hr 0x80070057.
mfplat.c:6571: Test failed: Unexpected leading byte.
mfplat.c:6573: Test failed: Unexpected hr 0x80070057.
=== debian11 (32 bit report) ===
Report validation errors:
mfplat:mfplat prints too much data (41310 bytes)
=== debian11 (32 bit WoW report) ===
Report validation errors:
mfplat:mfplat prints too much data (41318 bytes)
June 14, 2022
Re: [PATCH v2 2/8] mfplat/buffer: Fix image copy function for IMC2/IMC4 buffers with odd height.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=116955
Your paranoid android.
=== w7u_adm (32 bit report) ===
mfplat:
0864:mfplat: unhandled exception c0000005 at 6EFC7D1C
=== debian11 (32 bit report) ===
Report validation errors:
mfplat:mfplat prints too much data (41290 bytes)
=== debian11 (32 bit WoW report) ===
Report validation errors:
mfplat:mfplat prints too much data (38287 bytes)
June 14, 2022
Re: [PATCH v2 7/8] mflat/buffer: Support YV12, I420 and IYUV image formats.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=116960
Your paranoid android.
=== debian11 (32 bit report) ===
Report validation errors:
mfplat:mfplat prints too much data (38307 bytes)
=== debian11 (32 bit WoW report) ===
Report validation errors:
mfplat:mfplat prints too much data (38334 bytes)
June 14, 2022
Re: [PATCH v2 0/1] MR134: ntdll: Don't hard-code the battery and AC adapter names on Linux
by Stefan Dösinger
Or look at KDE/Gnome's power status tray applets. In my case KDE once upon a time also reported the battery status of my bluetooth mouse and sent the laptop into standby when the mouse was running low. So they are/were facing the same issue.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/134#note_2035
June 14, 2022
Re: [PATCH v2 1/8] mfplat/buffer: Fix size for IMC2/IMC4 buffers with odd height.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=116954
Your paranoid android.
=== w7u_adm (32 bit report) ===
mfplat:
0864:mfplat: unhandled exception c0000005 at 6ED77D1C
=== debian11 (32 bit report) ===
Report validation errors:
mfplat:mfplat prints too much data (38251 bytes)
=== debian11 (32 bit WoW report) ===
Report validation errors:
mfplat:mfplat prints too much data (41338 bytes)
June 14, 2022
Re: [PATCH v2 5/8] mfplat/buffer: Redirect all Lock2D() implementations to Lock2DSize().
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=116958
Your paranoid android.
=== debian11 (32 bit report) ===
Report validation errors:
mfplat:mfplat prints too much data (41310 bytes)
=== debian11 (32 bit WoW report) ===
Report validation errors:
mfplat:mfplat prints too much data (41318 bytes)
June 14, 2022
Gitlab experiment wrapup
by Alexandre Julliard
Folks,
Here's a summary of the Gitlab experiment discussion, with some
additional comments. Thanks to everybody who sent their feedback!
* Things that people like:
- Fetching commits directly with git instead of applying patches from
emails (Huw, Jacek, Paul, Zeb). Indeed that's a major help for me as
well.
- Better tracker, easy to see the list of pending reviews (Huw).
- Possibility to host more Wine projects, as well as private Wine trees
to share WIP patches (Jacek). Indeed it would be nice to have all Wine
projects in one place instead of the current mix of
github/sourceforge/etc.
- Potential for automation (Jacek). Gitlab offers many services that we
will be able to take advantage of, the most obvious being CI for the
testbot. Having all the data in a proper database instead of free-form
emails should make it possible to do other interesting things as well.
* Some other things I like:
- Updating status doesn't need to go through me, people can assign
reviewers, supersede patches, etc. directly. That reduces my workload
and improves the bus factor. Once we have figured out how to make
testbot results reliable, we could also have maintainers merge commits
directly.
- The full discussion thread for a given MR is readily accessible, it
doesn't require hunting down the multiple revisions of a patch and
associated threads in the mailman archive.
* Things that could be improved:
- Signoffs are a bit cumbersome (Rémi). We should change the
requirements to something better adapted to Gitlab.
- It's only possible to approve the whole MR, not individual commits
(Huw, Zeb). I think that's an acceptable trade-off, but we could
imagine other approaches.
- The mailing list gateway creates too much noise; mixing comments from
Gitlab and mailing list isn't very clean (Jacek, Rémi, Alex). We can
make some tweaks, or use a separate list, or even rethink the approach
of the mail gateway.
- Gitlab threading support is limited, nested comment threads are not
supported (Zeb). That's true, but looking through the past few months
of patch reviews, it seems that we almost never use nested threads, so
I think we can live with that limitation.
- Reviewers can push fixups to commits, but that requires the author to
grant explicit permission (Jacek). Hopefully we can tweak access
rights to allow this by default.
* Conclusion
I think Gitlab is working well for us, and most people seem generally
happy with it. So my plan is to go forward and make Gitlab the main
development platform for Wine.
I'll start working on the transition, and on the improvements mentioned
above. Any help will be welcome! I'll be posting a roadmap shortly.
--
Alexandre Julliard
julliard(a)winehq.org
June 14, 2022
Re: [PATCH 5/5] mfplat/buffer: Redirect all Lock2D() implementations to Lock2DSize().
by Nikolay Sivov
On 6/14/22 11:52, Giovanni Mascellani wrote:
> 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().
>
I don't what to get rid of it, I want to see which method is called,
including non-generic name of method itself.
> Giovanni.
>
June 14, 2022
[PATCH v2 8/8] mfplat/tests: Merge and reorganize image format tests.
by Giovanni Mascellani
Signed-off-by: Giovanni Mascellani <gmascellani(a)codeweavers.com>
---
v2:
* Added
---
dlls/mfplat/tests/mfplat.c | 279 +++++++++++++++++--------------------
1 file changed, 131 insertions(+), 148 deletions(-)
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c
index 74de51b42f1..8d8bd27b8fb 100644
--- a/dlls/mfplat/tests/mfplat.c
+++ b/dlls/mfplat/tests/mfplat.c
@@ -4233,87 +4233,122 @@ static const struct image_size_test
UINT32 height;
UINT32 size;
UINT32 plane_size; /* Matches image size when 0. */
+ UINT32 max_length;
+ UINT32 contiguous_length;
+ UINT32 pitch;
}
image_size_tests[] =
{
- { &MFVideoFormat_RGB8, 3, 5, 20 },
- { &MFVideoFormat_RGB8, 1, 1, 4 },
- { &MFVideoFormat_RGB555, 3, 5, 40 },
- { &MFVideoFormat_RGB555, 1, 1, 4 },
- { &MFVideoFormat_RGB565, 3, 5, 40 },
- { &MFVideoFormat_RGB565, 1, 1, 4 },
- { &MFVideoFormat_RGB24, 3, 5, 60 },
- { &MFVideoFormat_RGB24, 1, 1, 4 },
- { &MFVideoFormat_RGB32, 3, 5, 60 },
- { &MFVideoFormat_RGB32, 1, 1, 4 },
- { &MFVideoFormat_ARGB32, 3, 5, 60 },
- { &MFVideoFormat_ARGB32, 1, 1, 4 },
- { &MFVideoFormat_A2R10G10B10, 3, 5, 60 },
- { &MFVideoFormat_A2R10G10B10, 1, 1, 4 },
- { &MFVideoFormat_A16B16G16R16F, 3, 5, 120 },
- { &MFVideoFormat_A16B16G16R16F, 1, 1, 8 },
-
- /* YUV */
- { &MFVideoFormat_NV12, 1, 3, 9, 4 },
- { &MFVideoFormat_NV12, 1, 2, 6, 3 },
- { &MFVideoFormat_NV12, 2, 2, 6, 6 },
- { &MFVideoFormat_NV12, 3, 2, 12, 9 },
- { &MFVideoFormat_NV12, 4, 2, 12 },
- { &MFVideoFormat_NV12, 320, 240, 115200 },
- { &MFVideoFormat_AYUV, 1, 1, 4 },
- { &MFVideoFormat_AYUV, 2, 1, 8 },
- { &MFVideoFormat_AYUV, 1, 2, 8 },
- { &MFVideoFormat_AYUV, 4, 3, 48 },
- { &MFVideoFormat_AYUV, 320, 240, 307200 },
- { &MFVideoFormat_IMC1, 1, 1, 4 },
- { &MFVideoFormat_IMC1, 2, 1, 4 },
- { &MFVideoFormat_IMC1, 1, 2, 8 },
- { &MFVideoFormat_IMC1, 4, 3, 24 },
- { &MFVideoFormat_IMC1, 320, 240, 153600 },
- { &MFVideoFormat_IMC3, 1, 1, 4 },
- { &MFVideoFormat_IMC3, 2, 1, 4 },
- { &MFVideoFormat_IMC3, 1, 2, 8 },
- { &MFVideoFormat_IMC3, 4, 3, 24 },
- { &MFVideoFormat_IMC3, 320, 240, 153600 },
- { &MFVideoFormat_IMC2, 1, 3, 9, 4 },
- { &MFVideoFormat_IMC2, 1, 2, 6, 3 },
- { &MFVideoFormat_IMC2, 2, 2, 6, 6 },
- { &MFVideoFormat_IMC2, 3, 2, 12, 9 },
- { &MFVideoFormat_IMC2, 4, 2, 12 },
- { &MFVideoFormat_IMC2, 320, 240, 115200 },
- { &MFVideoFormat_IMC4, 1, 3, 9, 4 },
- { &MFVideoFormat_IMC4, 1, 2, 6, 3 },
- { &MFVideoFormat_IMC4, 2, 2, 6, 6 },
- { &MFVideoFormat_IMC4, 3, 2, 12, 9 },
- { &MFVideoFormat_IMC4, 4, 2, 12 },
- { &MFVideoFormat_IMC4, 320, 240, 115200 },
- { &MFVideoFormat_YV12, 1, 1, 3, 1 },
- { &MFVideoFormat_YV12, 2, 1, 3 },
- { &MFVideoFormat_YV12, 1, 2, 6, 3 },
- { &MFVideoFormat_YV12, 4, 3, 18 },
- { &MFVideoFormat_YV12, 320, 240, 115200 },
-
- { &MFVideoFormat_I420, 1, 1, 3, 1 },
- { &MFVideoFormat_I420, 2, 1, 3 },
- { &MFVideoFormat_I420, 1, 2, 6, 3 },
- { &MFVideoFormat_I420, 4, 3, 18 },
- { &MFVideoFormat_I420, 320, 240, 115200 },
-
- { &MFVideoFormat_IYUV, 1, 1, 3, 1 },
- { &MFVideoFormat_IYUV, 2, 1, 3 },
- { &MFVideoFormat_IYUV, 1, 2, 6, 3 },
- { &MFVideoFormat_IYUV, 4, 3, 18 },
- { &MFVideoFormat_IYUV, 320, 240, 115200 },
-
- { &MFVideoFormat_YUY2, 2, 1, 4 },
- { &MFVideoFormat_YUY2, 4, 3, 24 },
- { &MFVideoFormat_YUY2, 128, 128, 32768 },
- { &MFVideoFormat_YUY2, 320, 240, 153600 },
-
- { &MFVideoFormat_UYVY, 2, 1, 4 },
- { &MFVideoFormat_UYVY, 4, 3, 24 },
- { &MFVideoFormat_UYVY, 128, 128, 32768 },
- { &MFVideoFormat_UYVY, 320, 240, 153600 },
+ /* RGB */
+ { &MFVideoFormat_RGB8, 3, 5, 20, 0, 320, 20, 64 },
+ { &MFVideoFormat_RGB8, 1, 1, 4, 0, 64, 4, 64 },
+ { &MFVideoFormat_RGB555, 3, 5, 40, 0, 320, 40, 64 },
+ { &MFVideoFormat_RGB555, 1, 1, 4, 0, 64, 4, 64 },
+ { &MFVideoFormat_RGB565, 3, 5, 40, 0, 320, 40, 64 },
+ { &MFVideoFormat_RGB565, 1, 1, 4, 0, 64, 4, 64 },
+ { &MFVideoFormat_RGB24, 3, 5, 60, 0, 320, 60, 64 },
+ { &MFVideoFormat_RGB24, 1, 1, 4, 0, 64, 4, 64 },
+ { &MFVideoFormat_RGB32, 3, 5, 60, 0, 320, 60, 64 },
+ { &MFVideoFormat_RGB32, 1, 1, 4, 0, 64, 4, 64 },
+ { &MFVideoFormat_ARGB32, 3, 5, 60, 0, 320, 60, 64 },
+ { &MFVideoFormat_ARGB32, 1, 1, 4, 0, 64, 4, 64 },
+ { &MFVideoFormat_A2R10G10B10, 3, 5, 60, 0, 320, 60, 64 },
+ { &MFVideoFormat_A2R10G10B10, 1, 1, 4, 0, 64, 4, 64 },
+ { &MFVideoFormat_A16B16G16R16F, 3, 5, 120, 0, 320, 120, 64 },
+ { &MFVideoFormat_A16B16G16R16F, 1, 1, 8, 0, 64, 8, 64 },
+
+ /* YUV, 32 bpp, packed */
+ { &MFVideoFormat_AYUV, 1, 1, 4, 0, 64, 4, 64 },
+ { &MFVideoFormat_AYUV, 2, 1, 8, 0, 64, 8, 64 },
+ { &MFVideoFormat_AYUV, 1, 2, 8, 0, 128, 8, 64 },
+ { &MFVideoFormat_AYUV, 4, 3, 48, 0, 192, 48, 64 },
+ { &MFVideoFormat_AYUV, 320, 240, 307200, 0, 307200, 307200, 1280 },
+
+ /* YUV, 16 bpp, packed */
+ { &MFVideoFormat_YUY2, 2, 1, 4, 0, 64, 4, 64 },
+ { &MFVideoFormat_YUY2, 4, 3, 24, 0, 192, 24, 64 },
+ { &MFVideoFormat_YUY2, 128, 128, 32768, 0, 32768, 32768, 256 },
+ { &MFVideoFormat_YUY2, 320, 240, 153600, 0, 153600, 153600, 640 },
+
+ { &MFVideoFormat_UYVY, 2, 1, 4, 0, 64, 4, 64 },
+ { &MFVideoFormat_UYVY, 4, 3, 24, 0, 192, 24, 64 },
+ { &MFVideoFormat_UYVY, 128, 128, 32768, 0, 32768, 32768, 256 },
+ { &MFVideoFormat_UYVY, 320, 240, 153600, 0, 153600, 153600, 640 },
+
+ /* YUV, 16 bpp, planar */
+ { &MFVideoFormat_IMC1, 1, 1, 4, 0, 256, 8, 128 },
+ { &MFVideoFormat_IMC1, 2, 1, 4, 0, 256, 8, 128 },
+ { &MFVideoFormat_IMC1, 1, 2, 8, 0, 512, 16, 128 },
+ { &MFVideoFormat_IMC1, 2, 2, 8, 0, 512, 16, 128 },
+ { &MFVideoFormat_IMC1, 2, 4, 16, 0, 1024, 32, 128 },
+ { &MFVideoFormat_IMC1, 4, 2, 16, 0, 512, 32, 128 },
+ { &MFVideoFormat_IMC1, 4, 3, 24, 0, 768, 48, 128 },
+ { &MFVideoFormat_IMC1, 320, 240, 153600, 0, 307200, 307200, 640 },
+
+ { &MFVideoFormat_IMC3, 1, 1, 4, 0, 256, 8, 128 },
+ { &MFVideoFormat_IMC3, 2, 1, 4, 0, 256, 8, 128 },
+ { &MFVideoFormat_IMC3, 1, 2, 8, 0, 512, 16, 128 },
+ { &MFVideoFormat_IMC3, 2, 2, 8, 0, 512, 16, 128 },
+ { &MFVideoFormat_IMC3, 2, 4, 16, 0, 1024, 32, 128 },
+ { &MFVideoFormat_IMC3, 4, 2, 16, 0, 512, 32, 128 },
+ { &MFVideoFormat_IMC3, 4, 3, 24, 0, 768, 48, 128 },
+ { &MFVideoFormat_IMC3, 320, 240, 153600, 0, 307200, 307200, 640 },
+
+ /* YUV, 12 bpp, planar, full stride */
+ { &MFVideoFormat_NV12, 1, 3, 9, 4, 288, 4, 64 },
+ { &MFVideoFormat_NV12, 1, 2, 6, 3, 192, 3, 64 },
+ { &MFVideoFormat_NV12, 2, 2, 6, 6, 192, 6, 64 },
+ { &MFVideoFormat_NV12, 2, 4, 12, 0, 384, 12, 64 },
+ { &MFVideoFormat_NV12, 3, 2, 12, 9, 192, 9, 64 },
+ { &MFVideoFormat_NV12, 4, 2, 12, 0, 192, 12, 64 },
+ { &MFVideoFormat_NV12, 320, 240, 115200, 0, 115200, 115200, 320 },
+
+ /* YUV, 12 bpp, planar, half stride */
+ { &MFVideoFormat_IMC2, 1, 3, 9, 4, 576, 3, 128 },
+ { &MFVideoFormat_IMC2, 3, 5, 30, 22, 960, 20, 128 },
+ { &MFVideoFormat_IMC2, 1, 2, 6, 3, 384, 2, 128 },
+ { &MFVideoFormat_IMC2, 2, 2, 6, 6, 384, 6, 128 },
+ { &MFVideoFormat_IMC2, 2, 4, 12, 0, 768, 12, 128 },
+ { &MFVideoFormat_IMC2, 3, 2, 12, 9, 384, 8, 128 },
+ { &MFVideoFormat_IMC2, 4, 2, 12, 0, 384, 12, 128 },
+ { &MFVideoFormat_IMC2, 320, 240, 115200, 0, 138240, 115200, 384 },
+
+ { &MFVideoFormat_IMC4, 1, 3, 9, 4, 576, 3, 128 },
+ { &MFVideoFormat_IMC4, 3, 5, 30, 22, 960, 20, 128 },
+ { &MFVideoFormat_IMC4, 1, 2, 6, 3, 384, 2, 128 },
+ { &MFVideoFormat_IMC4, 2, 2, 6, 6, 384, 6, 128 },
+ { &MFVideoFormat_IMC4, 2, 4, 12, 0, 768, 12, 128 },
+ { &MFVideoFormat_IMC4, 3, 2, 12, 9, 384, 8, 128 },
+ { &MFVideoFormat_IMC4, 4, 2, 12, 0, 384, 12, 128 },
+ { &MFVideoFormat_IMC4, 320, 240, 115200, 0, 138240, 115200, 384 },
+
+ { &MFVideoFormat_YV12, 1, 1, 3, 1, 192, 1, 128 },
+ { &MFVideoFormat_YV12, 2, 1, 3, 0, 192, 3, 128 },
+ { &MFVideoFormat_YV12, 1, 2, 6, 3, 384, 2, 128 },
+ { &MFVideoFormat_YV12, 2, 2, 6, 0, 384, 6, 128 },
+ { &MFVideoFormat_YV12, 2, 4, 12, 0, 768, 12, 128 },
+ { &MFVideoFormat_YV12, 4, 2, 12, 0, 384, 12, 128 },
+ { &MFVideoFormat_YV12, 4, 3, 18, 0, 576, 18, 128 },
+ { &MFVideoFormat_YV12, 320, 240, 115200, 0, 138240, 115200, 384 },
+
+ { &MFVideoFormat_I420, 1, 1, 3, 1, 192, 1, 128 },
+ { &MFVideoFormat_I420, 2, 1, 3, 0, 192, 3, 128 },
+ { &MFVideoFormat_I420, 1, 2, 6, 3, 384, 2, 128 },
+ { &MFVideoFormat_I420, 2, 2, 6, 0, 384, 6, 128 },
+ { &MFVideoFormat_I420, 2, 4, 12, 0, 768, 12, 128 },
+ { &MFVideoFormat_I420, 4, 2, 12, 0, 384, 12, 128 },
+ { &MFVideoFormat_I420, 4, 3, 18, 0, 576, 18, 128 },
+ { &MFVideoFormat_I420, 320, 240, 115200, 0, 138240, 115200, 384 },
+
+ { &MFVideoFormat_IYUV, 1, 1, 3, 1, 192, 1, 128 },
+ { &MFVideoFormat_IYUV, 2, 1, 3, 0, 192, 3, 128 },
+ { &MFVideoFormat_IYUV, 1, 2, 6, 3, 384, 2, 128 },
+ { &MFVideoFormat_IYUV, 2, 2, 6, 0, 384, 6, 128 },
+ { &MFVideoFormat_IYUV, 2, 4, 12, 0, 768, 12, 128 },
+ { &MFVideoFormat_IYUV, 4, 2, 12, 0, 384, 12, 128 },
+ { &MFVideoFormat_IYUV, 4, 3, 18, 0, 576, 18, 128 },
+ { &MFVideoFormat_IYUV, 320, 240, 115200, 0, 138240, 115200, 384 },
+
};
static void test_MFCalculateImageSize(void)
@@ -4366,7 +4401,8 @@ static void test_MFGetPlaneSize(void)
hr = pMFGetPlaneSize(ptr->subtype->Data1, ptr->width, ptr->height, &size);
ok(hr == S_OK, "%u: failed to get plane size, hr %#lx.\n", i, hr);
- ok(size == plane_size, "%u: unexpected plane size %lu, expected %u.\n", i, size, plane_size);
+ ok(size == plane_size, "%u: unexpected plane size %lu, expected %u. Size %u x %u, format %s.\n", i, size, plane_size,
+ ptr->width, ptr->height, wine_dbgstr_an((char*)&ptr->subtype->Data1, 4));
}
}
@@ -5706,61 +5742,6 @@ static void test_MFGetStrideForBitmapInfoHeader(void)
static void test_MFCreate2DMediaBuffer(void)
{
- static const struct _2d_buffer_test
- {
- unsigned int width;
- unsigned int height;
- unsigned int fourcc;
- unsigned int contiguous_length;
- int pitch;
- unsigned int max_length;
- } _2d_buffer_tests[] =
- {
- { 2, 2, MAKEFOURCC('N','V','1','2'), 6, 64, 192 },
- { 4, 2, MAKEFOURCC('N','V','1','2'), 12, 64 },
- { 2, 4, MAKEFOURCC('N','V','1','2'), 12, 64 },
- { 1, 3, MAKEFOURCC('N','V','1','2'), 4, 64 },
- { 4, 16, MAKEFOURCC('N','V','1','2'), 96, 64, 1536 },
-
- { 2, 2, MAKEFOURCC('I','M','C','2'), 6, 128, 384 },
- { 4, 2, MAKEFOURCC('I','M','C','2'), 12, 128 },
- { 2, 4, MAKEFOURCC('I','M','C','2'), 12, 128 },
- { 3, 5, MAKEFOURCC('I','M','C','2'), 20, 128 },
- { 2, 2, MAKEFOURCC('I','M','C','4'), 6, 128 },
- { 4, 2, MAKEFOURCC('I','M','C','4'), 12, 128 },
- { 2, 4, MAKEFOURCC('I','M','C','4'), 12, 128 },
- { 3, 5, MAKEFOURCC('I','M','C','4'), 20, 128 },
-
- { 4, 2, MAKEFOURCC('I','M','C','1'), 32, 128 },
- { 4, 4, MAKEFOURCC('I','M','C','1'), 64, 128 },
- { 4, 16, MAKEFOURCC('I','M','C','1'), 256, 128, 4096 },
- { 4, 20, MAKEFOURCC('I','M','C','1'), 320, 128 },
-
- { 4, 2, MAKEFOURCC('I','M','C','3'), 32, 128 },
- { 4, 4, MAKEFOURCC('I','M','C','3'), 64, 128 },
- { 4, 16, MAKEFOURCC('I','M','C','3'), 256, 128, 4096 },
- { 4, 20, MAKEFOURCC('I','M','C','3'), 320, 128 },
-
- { 4, 2, MAKEFOURCC('Y','V','1','2'), 12, 128 },
- { 4, 4, MAKEFOURCC('Y','V','1','2'), 24, 128 },
- { 4, 16, MAKEFOURCC('Y','V','1','2'), 96, 128, 3072 },
-
- { 4, 2, MAKEFOURCC('A','Y','U','V'), 32, 64 },
- { 4, 4, MAKEFOURCC('A','Y','U','V'), 64, 64 },
- { 4, 16, MAKEFOURCC('A','Y','U','V'), 256, 64, 1024 },
-
- { 4, 2, MAKEFOURCC('Y','U','Y','2'), 16, 64 },
- { 4, 4, MAKEFOURCC('Y','U','Y','2'), 32, 64 },
- { 4, 16, MAKEFOURCC('Y','U','Y','2'), 128, 64, 1024 },
-
- { 4, 2, MAKEFOURCC('U','Y','V','Y'), 16, 64 },
- { 4, 4, MAKEFOURCC('U','Y','V','Y'), 32, 64 },
- { 4, 16, MAKEFOURCC('U','Y','V','Y'), 128, 64, 1024 },
-
- { 2, 4, D3DFMT_A8R8G8B8, 32, 64 },
- { 1, 4, D3DFMT_A8R8G8B8, 16, 64 },
- { 4, 1, D3DFMT_A8R8G8B8, 16, 64 },
- };
static const char two_aas[] = { 0xaa, 0xaa };
static const char eight_bbs[] = { 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb };
DWORD max_length, length, length2;
@@ -5958,18 +5939,17 @@ static void test_MFCreate2DMediaBuffer(void)
IMFMediaBuffer_Release(buffer);
- for (i = 0; i < ARRAY_SIZE(_2d_buffer_tests); ++i)
+ for (i = 0; i < ARRAY_SIZE(image_size_tests); ++i)
{
- const struct _2d_buffer_test *ptr = &_2d_buffer_tests[i];
+ const struct image_size_test *ptr = &image_size_tests[i];
- hr = pMFCreate2DMediaBuffer(ptr->width, ptr->height, ptr->fourcc, FALSE, &buffer);
+ hr = pMFCreate2DMediaBuffer(ptr->width, ptr->height, ptr->subtype->Data1, FALSE, &buffer);
ok(hr == S_OK, "Failed to create a buffer, hr %#lx.\n", hr);
hr = IMFMediaBuffer_GetMaxLength(buffer, &length);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
- if (ptr->max_length)
- ok(length == ptr->max_length, "%u: unexpected maximum length %lu for %u x %u, format %s.\n",
- i, length, ptr->width, ptr->height, wine_dbgstr_an((char *)&ptr->fourcc, 4));
+ ok(length == ptr->max_length, "%u: unexpected maximum length %lu for %u x %u, format %s.\n",
+ i, length, ptr->width, ptr->height, wine_dbgstr_guid(ptr->subtype));
hr = IMFMediaBuffer_QueryInterface(buffer, &IID_IMF2DBuffer, (void **)&_2dbuffer);
ok(hr == S_OK, "Failed to get interface, hr %#lx.\n", hr);
@@ -5977,12 +5957,12 @@ static void test_MFCreate2DMediaBuffer(void)
hr = IMF2DBuffer_GetContiguousLength(_2dbuffer, &length);
ok(hr == S_OK, "Failed to get length, hr %#lx.\n", hr);
ok(length == ptr->contiguous_length, "%d: unexpected contiguous length %lu for %u x %u, format %s.\n",
- i, length, ptr->width, ptr->height, wine_dbgstr_an((char *)&ptr->fourcc, 4));
+ i, length, ptr->width, ptr->height, wine_dbgstr_guid(ptr->subtype));
hr = IMFMediaBuffer_Lock(buffer, &data, &length2, NULL);
ok(hr == S_OK, "Failed to lock buffer, hr %#lx.\n", hr);
ok(length2 == ptr->contiguous_length, "%d: unexpected linear buffer length %lu for %u x %u, format %s.\n",
- i, length2, ptr->width, ptr->height, wine_dbgstr_an((char *)&ptr->fourcc, 4));
+ i, length2, ptr->width, ptr->height, wine_dbgstr_guid(ptr->subtype));
memset(data, 0xff, length2);
@@ -6002,11 +5982,11 @@ static void test_MFCreate2DMediaBuffer(void)
for (k = 0; k < ptr->width; k++)
ok(data[j * pitch + k] == 0xff, "Unexpected byte %02x at test %d row %d column %d.\n", data[j * pitch + k], i, j, k);
- hr = pMFGetStrideForBitmapInfoHeader(ptr->fourcc, ptr->width, &stride);
+ hr = pMFGetStrideForBitmapInfoHeader(ptr->subtype->Data1, ptr->width, &stride);
ok(hr == S_OK, "Failed to get stride, hr %#lx.\n", hr);
/* secondary planes */
- switch (ptr->fourcc)
+ switch (ptr->subtype->Data1)
{
case MAKEFOURCC('I','M','C','1'):
case MAKEFOURCC('I','M','C','3'):
@@ -6017,6 +5997,9 @@ static void test_MFCreate2DMediaBuffer(void)
case MAKEFOURCC('I','M','C','2'):
case MAKEFOURCC('I','M','C','4'):
+ case MAKEFOURCC('Y','V','1','2'):
+ case MAKEFOURCC('I','4','2','0'):
+ case MAKEFOURCC('I','Y','U','V'):
for (j = 0; ptr->height * stride + j * (stride / 2) < length2; j++)
for (k = 0; k < ptr->width / 2; k++)
ok(data[ptr->height * pitch + j * (pitch / 2) + k] == 0xff,
@@ -6038,7 +6021,7 @@ static void test_MFCreate2DMediaBuffer(void)
ok(hr == S_OK, "Failed to unlock buffer, hr %#lx.\n", hr);
ok(pitch == ptr->pitch, "%d: unexpected pitch %ld, expected %d, %u x %u, format %s.\n", i, pitch, ptr->pitch,
- ptr->width, ptr->height, wine_dbgstr_an((char *)&ptr->fourcc, 4));
+ ptr->width, ptr->height, wine_dbgstr_guid(ptr->subtype));
ret = TRUE;
hr = IMF2DBuffer_IsContiguousFormat(_2dbuffer, &ret);
@@ -6051,11 +6034,11 @@ static void test_MFCreate2DMediaBuffer(void)
}
/* Alignment tests */
- for (i = 0; i < ARRAY_SIZE(_2d_buffer_tests); ++i)
+ for (i = 0; i < ARRAY_SIZE(image_size_tests); ++i)
{
- const struct _2d_buffer_test *ptr = &_2d_buffer_tests[i];
+ const struct image_size_test *ptr = &image_size_tests[i];
- hr = pMFCreate2DMediaBuffer(ptr->width, ptr->height, ptr->fourcc, FALSE, &buffer);
+ hr = pMFCreate2DMediaBuffer(ptr->width, ptr->height, ptr->subtype->Data1, FALSE, &buffer);
ok(hr == S_OK, "Failed to create a buffer, hr %#lx.\n", hr);
hr = IMFMediaBuffer_QueryInterface(buffer, &IID_IMF2DBuffer, (void **)&_2dbuffer);
--
2.36.1
June 14, 2022
[PATCH v2 7/8] mflat/buffer: Support YV12, I420 and IYUV image formats.
by Giovanni Mascellani
Signed-off-by: Giovanni Mascellani <gmascellani(a)codeweavers.com>
---
v2:
* Added
---
dlls/mfplat/buffer.c | 36 ++++++++++++++++++++++++++----------
1 file changed, 26 insertions(+), 10 deletions(-)
diff --git a/dlls/mfplat/buffer.c b/dlls/mfplat/buffer.c
index 52800b37203..cf1b46709a4 100644
--- a/dlls/mfplat/buffer.c
+++ b/dlls/mfplat/buffer.c
@@ -1236,13 +1236,25 @@ static HRESULT create_1d_buffer(DWORD max_length, DWORD alignment, IMFMediaBuffe
static p_copy_image_func get_2d_buffer_copy_func(DWORD fourcc)
{
- if (fourcc == MAKEFOURCC('N','V','1','2'))
- return copy_image_nv12;
- if (fourcc == MAKEFOURCC('I','M','C','1') || fourcc == MAKEFOURCC('I','M','C','3'))
- return copy_image_imc1;
- if (fourcc == MAKEFOURCC('I','M','C','2') || fourcc == MAKEFOURCC('I','M','C','4'))
- return copy_image_imc2;
- return NULL;
+ switch (fourcc)
+ {
+ case MAKEFOURCC('N','V','1','2'):
+ return copy_image_nv12;
+
+ case MAKEFOURCC('I','M','C','1'):
+ case MAKEFOURCC('I','M','C','3'):
+ return copy_image_imc1;
+
+ case MAKEFOURCC('I','M','C','2'):
+ case MAKEFOURCC('I','M','C','4'):
+ case MAKEFOURCC('Y','V','1','2'):
+ case MAKEFOURCC('I','4','2','0'):
+ case MAKEFOURCC('I','Y','U','V'):
+ return copy_image_imc2;
+
+ default:
+ return NULL;
+ }
}
static HRESULT create_2d_buffer(DWORD width, DWORD height, DWORD fourcc, BOOL bottom_up, IMFMediaBuffer **buffer)
@@ -1278,12 +1290,12 @@ static HRESULT create_2d_buffer(DWORD width, DWORD height, DWORD fourcc, BOOL bo
break;
case MAKEFOURCC('I','M','C','2'):
case MAKEFOURCC('I','M','C','4'):
- plane_size = stride * 3 / 2 * height;
- break;
- case MAKEFOURCC('N','V','1','2'):
case MAKEFOURCC('Y','V','1','2'):
case MAKEFOURCC('I','4','2','0'):
case MAKEFOURCC('I','Y','U','V'):
+ plane_size = stride * 3 / 2 * height;
+ break;
+ case MAKEFOURCC('N','V','1','2'):
plane_size = stride * height * 3 / 2;
break;
default:
@@ -1300,6 +1312,8 @@ static HRESULT create_2d_buffer(DWORD width, DWORD height, DWORD fourcc, BOOL bo
case MAKEFOURCC('I','M','C','3'):
case MAKEFOURCC('I','M','C','4'):
case MAKEFOURCC('Y','V','1','2'):
+ case MAKEFOURCC('I','4','2','0'):
+ case MAKEFOURCC('I','Y','U','V'):
row_alignment = MF_128_BYTE_ALIGNMENT;
break;
default:
@@ -1318,6 +1332,8 @@ static HRESULT create_2d_buffer(DWORD width, DWORD height, DWORD fourcc, BOOL bo
case MAKEFOURCC('Y','V','1','2'):
case MAKEFOURCC('I','M','C','2'):
case MAKEFOURCC('I','M','C','4'):
+ case MAKEFOURCC('I','4','2','0'):
+ case MAKEFOURCC('I','Y','U','V'):
max_length = pitch * height * 3 / 2;
break;
default:
--
2.36.1
June 14, 2022