Commit graph

563 commits

Author SHA1 Message Date
Brendan McGrath ac32d3fd72 mplat/tests: Test Media Source is freed if immediately released.
Tests that the Media Source and its associated resources are freed if
Release is called immediately after creation. That is, without a call to either
Start or Shutdown.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56686
2024-05-17 18:01:44 +02:00
Rémi Bernon 47884f6fba mfplat: Add MFVideoFormat_ABGR32 format information. 2024-05-17 18:01:44 +02:00
Yuxuan Shui cf24381899 rtworkq: Release cancelled work items.
Usually the threadpool holds a reference to the `work_item`, which is released when the `work_item`'s
callback is invoked. On the other hand, `queue_cancel_item` closes the threadpool object without
releasing the `work_item`. So if the callbacks don't get a chance to run - which is not guaranteed -
the `work_item` will be leaked.

The fix is not as simple as adding a `IUnknown_Release` to `queue_cancel_item`, because the
`work_item`'s callback can still be called after CloseThreadpoolTimer/Wait has returned. In fact its
callback might currently be running. In which case the callback will access freed memory if
`queue_cancel_item` frees the `work_item`.

We have to stop any further callbacks to be queued, wait for any currently running callbacks to
finish, then finally we can release the `work_item` if it hasn't already been freed during the wait.
2024-05-12 16:32:53 +02:00
Yuxuan Shui a40c1bc01e mfplat/tests: Validate MFCancelWorkItem releases the callback. 2024-05-12 16:32:53 +02:00
Rémi Bernon bf64ae2627 mfplat: Implement MFCreateVideoMediaType. 2024-05-12 16:32:25 +02:00
Rémi Bernon 9fac589765 mfplat: Implement MFInitMediaTypeFromMPEG2VideoInfo. 2024-05-12 16:32:24 +02:00
Rémi Bernon 8c77a1a099 mfplat: Implement MFInitMediaTypeFromMPEG1VideoInfo. 2024-05-12 16:32:23 +02:00
Rémi Bernon ec0455b97a mfplat: Implement FORMAT_MPEG2Video for MFInitAMMediaTypeFromMFMediaType. 2024-05-12 16:32:23 +02:00
Rémi Bernon dce8d8b552 mfplat: Implement FORMAT_MPEGVideo for MFInitAMMediaTypeFromMFMediaType. 2024-05-12 16:32:23 +02:00
Rémi Bernon 0b5c04c517 mfplat: Set AM_MEDIA_TYPE bTemporalCompression and bFixedSizeSamples. 2024-05-12 16:32:23 +02:00
Rémi Bernon 772ad6e8a9 mfplat: Factor AM_MEDIA_TYPE video format allocation. 2024-05-12 16:32:23 +02:00
Rémi Bernon 00758a2e20 mfplat: Use media_type_get_uint32 in more places. 2024-05-12 16:32:23 +02:00
Rémi Bernon 704c510045 mfplat: Introduce a new init_video_info_header helper. 2024-05-12 16:32:23 +02:00
Rémi Bernon 3404de3075 mfplat: Use IMFMediaType_GetBlobSize instead of IMFMediaType_GetBlob. 2024-05-12 16:32:23 +02:00
Rémi Bernon 551d047ae4 mfplat: Fix MFCreateMFVideoFormatFromMFMediaType videoInfo.VideoFlags masks. 2024-05-12 16:32:23 +02:00
Rémi Bernon 26876b4a6e mfplat: Append MFVIDEOFORMAT user data after the structure padding.
Instead of using the last palette entry, which might be misaligned.
2024-03-22 17:05:40 +01:00
Rémi Bernon 552cec9477 mfplat/mediatype: Use MFCreateWaveFormatExFromMFMediaType in init_am_media_type_audio_format. 2024-03-21 22:19:58 +01:00
Rémi Bernon 1e053810f3 mfplat/mediatype: Implement MFCreateMediaTypeFromRepresentation. 2024-03-21 22:19:57 +01:00
Rémi Bernon a4fb357c89 mfplat/mediatype: Force WAVEFORMATEXTENSIBLE in MFCreateWaveFormatExFromMFMediaType in some cases. 2024-03-21 22:19:57 +01:00
Rémi Bernon 689868cd50 mfplat/mediatype: Support audio major type in MFInitMediaTypeFromAMMediaType. 2024-03-21 22:19:57 +01:00
Rémi Bernon 45d4aa9f60 mfplat/mediatype: Check format pointers and sizes in MFInitMediaTypeFromAMMediaType. 2024-03-21 22:19:57 +01:00
Rémi Bernon 9ee0720d98 mfplat/tests: Check how AAC attributes are copied from user data. 2024-03-21 22:19:57 +01:00
Rémi Bernon 3593ce002f mfplat/tests: Test initializing mediatype from AAC WAVEFORMATEXTENSIBLE. 2024-03-21 22:19:57 +01:00
Rémi Bernon 2734b266de mfplat/tests: Add some broken results for Win7. 2024-03-21 22:19:57 +01:00
Rémi Bernon eac5ad2a26 mfplat/mediatype: Implement MFInitMediaTypeFromMFVideoFormat. 2024-03-19 23:02:11 +01:00
Rémi Bernon 899abeafe4 mfplat/tests: Add tests for MFInitMediaTypeFromMFVideoFormat. 2024-03-19 23:02:11 +01:00
Rémi Bernon a712d7ec87 mfplat/mediatype: Stub MFInitMediaTypeFromMFVideoFormat. 2024-03-19 23:02:11 +01:00
Rémi Bernon fe0c129e0b mfplat/tests: Check the conditions for the MFVideoFlag_BottomUpLinearRep flags. 2024-03-19 23:02:11 +01:00
Rémi Bernon b1d7c03514 mfplat/mediatype: Append user data in MFCreateMFVideoFormatFromMFMediaType. 2024-03-19 23:02:11 +01:00
Rémi Bernon 75a5263c60 mfplat/tests: Test that MFCreateMFVideoFormatFromMFMediaType appends user data. 2024-03-19 23:02:11 +01:00
Rémi Bernon 7598556b64 mfplat/tests: Test that aperture is dropped with VIDEOINFOHEADER2.
But preserved with MFVIDEOFORMAT.
2024-03-19 23:02:11 +01:00
Rémi Bernon fc97535ccb mfplat/mediatype: Implement some VIDEOINFOHEADER2 dwInterlaceFlags conversion. 2024-03-18 23:21:37 +01:00
Rémi Bernon 76abdf3403 mfplat/mediatype: Implement VIDEOINFOHEADER2 dwControlFlags conversion. 2024-03-18 23:21:37 +01:00
Rémi Bernon 5a34601606 mfplat/mediatype: Implement MF_MT_FRAME_RATE from VIDEOINFOHEADER2.
Native seems to also treat some frame rate specially, matching a wide
range of time per frame into the same predefined frame rates.
2024-03-18 23:21:37 +01:00
Rémi Bernon aa385765a1 mfplat: Support flexible frame time in MFAverageTimePerFrameToFrameRate. 2024-03-18 23:21:37 +01:00
Rémi Bernon 578d104cf6 mfplat/tests: Add more MFAverageTimePerFrameToFrameRate tests. 2024-03-18 23:21:37 +01:00
Rémi Bernon c94c464920 mfplat/mediatype: Set rcSource and rcTarget if stride differs from width. 2024-03-18 23:21:37 +01:00
Rémi Bernon d0c996b2b4 mfplat/mediatype: Map rcSource to MF_MT_(PAN_SCAN|MINIMUM_DISPLAY)_APERTURE. 2024-03-18 23:21:37 +01:00
Rémi Bernon 66ea15f13a mfplat/mediatype: Set MF_MT_SAMPLE_SIZE from bmiHeader.biSizeImage. 2024-03-18 23:21:37 +01:00
Rémi Bernon 08cafe23d5 mfplat/mediatype: Support FORMAT_VideoInfo2 in MFInitMediaTypeFromAMMediaType. 2024-03-18 23:21:37 +01:00
Rémi Bernon 6413303e60 mfplat/tests: Test aperture to VIDEOINFOHEADER fields mapping. 2024-03-18 23:21:37 +01:00
Rémi Bernon 8dd24ad2a4 mfplat/mediatype: Implement MFInitAMMediaTypeFromMFMediaType for FORMAT_VideoInfo2. 2024-03-15 15:06:38 +01:00
Rémi Bernon d307cfede9 mfplat/tests: Add tests for MFInitMediaTypeFromVideoInfoHeader2. 2024-03-15 15:06:38 +01:00
Rémi Bernon 4319ada736 mfplat/mediatype: Implement MFInitMediaTypeFromVideoInfoHeader2. 2024-03-15 15:06:38 +01:00
Rémi Bernon e497f0e88d mfplat/mediatype: Implement implicit MFInitMediaTypeFromVideoInfoHeader subtype. 2024-03-15 15:06:38 +01:00
Rémi Bernon 2692cd8b04 mfplat/tests: Test each VIDEOINFOHEADER field conversion separately. 2024-03-15 15:06:38 +01:00
Jacek Caban b8326ad4de mfplat: Introduce media_type_get_uint32 helper. 2024-01-31 12:04:32 +01:00
Jacek Caban 2e89cb4040 mfplat/tests: Use MF_ATTRIBUTE_TYPE type in IMFMediaType_GetItemType call. 2024-01-31 12:04:32 +01:00
Jacek Caban e935c242c3 mfplat: Avoid implicit cast in IMFAttributes_GetUINT32 call. 2024-01-31 12:04:32 +01:00
Nikolay Sivov e450bf42ab mfplat/tests: Skip tests that require d3d9 support. 2024-01-30 17:40:44 +01:00