Module: wine Branch: master Commit: 5a3460160670f9bbfb4f6ffc6bb7baadc5182f03 URL: https://gitlab.winehq.org/wine/wine/-/commit/5a3460160670f9bbfb4f6ffc6bb7baa...
Author: Rémi Bernon rbernon@codeweavers.com Date: Sat Feb 17 15:32:11 2024 +0100
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.
---
dlls/mfplat/mediatype.c | 7 +++++++ dlls/mfplat/tests/mfplat.c | 4 ---- 2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/dlls/mfplat/mediatype.c b/dlls/mfplat/mediatype.c index 0fd8402d4d2..96d9a07973e 100644 --- a/dlls/mfplat/mediatype.c +++ b/dlls/mfplat/mediatype.c @@ -3808,6 +3808,13 @@ HRESULT WINAPI MFInitMediaTypeFromVideoInfoHeader2(IMFMediaType *media_type, con mediatype_set_blob(media_type, &MF_MT_MINIMUM_DISPLAY_APERTURE, (BYTE *)&aperture, sizeof(aperture), &hr); }
+ if (SUCCEEDED(hr) && vih->AvgTimePerFrame) + { + UINT32 num, den; + if (SUCCEEDED(hr = MFAverageTimePerFrameToFrameRate(vih->AvgTimePerFrame, &num, &den))) + mediatype_set_uint64(media_type, &MF_MT_FRAME_RATE, num, den, &hr); + } + return hr; }
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index b6d63f42d1c..66c0f0d7951 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -10058,9 +10058,7 @@ static void test_MFInitMediaTypeFromVideoInfoHeader(void) hr = MFInitMediaTypeFromVideoInfoHeader(media_type, &vih, sizeof(vih), &GUID_NULL); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); hr = IMFMediaType_GetUINT64(media_type, &MF_MT_FRAME_RATE, &value64); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value64 == ((UINT64)10000000 << 32 | 1151617), "Unexpected value %#I64x.\n", value64);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_FIXED_SIZE_SAMPLES, &value32); @@ -10311,9 +10309,7 @@ static void test_MFInitMediaTypeFromVideoInfoHeader2(void) hr = MFInitMediaTypeFromVideoInfoHeader2(media_type, &vih, sizeof(vih), &GUID_NULL); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); hr = IMFMediaType_GetUINT64(media_type, &MF_MT_FRAME_RATE, &value64); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value64 == ((UINT64)10000000 << 32 | 1151617), "Unexpected value %#I64x.\n", value64);
value32 = 0xdeadbeef;